2013-06-10 5 views
-1

다음 코드를 단위 테스트하고 싶습니다. 지금은 Rhino Mock에서 NUnit을 사용하고 있습니다.실연하지 않은 모의 방법 의존성 주입?

참고 : 모든 NUnit과 테스트 케이스는 데이터베이스 작업

위의 코드에서
interface IdbOperation 
{ 
     int insert(); 
} 

public class databaseactivity:IdbOperation 
{ 
    public databaseactivity() 
    { 
     verifyDBConnection(); 
    } 

    void verifyDBConnection() 
    { 
     DbManager dbManager=new DbManager(); 

     if(dbManager.state()!=True) 
     { 
     Throw new DatabaseException(); 
     } 
    } 

    public int insert(bo obj) 
    { 
     Serviceclient serviceClient=new Serviceclient(); 
     serviceClient.insert(obj); 
    } 
} 

을하지 말아야 할, 내가 방법을 많이 시도 삽입 곤하는 법에 대한 단위 테스트 케이스를 작성하려면 조롱 할 수는 없으니 조만간 삽입 방법을 조롱 해 주실 수 있겠습니까? ASAP

다른 조롱 프레임 워크를 추천 해 줄 수 있습니다.

+3

모의 테스트는 종속성 삽입 없이는 작동하지 않습니다. 그런 삶입니다. – sq33G

+0

천 번이. 메소드에서 이러한 구체적인 클래스가 인스턴스화되지 않도록 코드를 리팩토링해야합니다. @ sq33G 주석을 충분히 빨리 +1 할 수 없습니다. –

+0

감사합니다. 귀하의 우려에 동의합니다. 고객과 논의했으나 기존 코드를 변경할 준비가되지 않았습니다. 왜 내가 다른 대체 경로를 찾으러 여기에 왔습니까? Microsoft 두더지가 도움이 되었습니까? – manikandan

답변

0

어떨까요?

public databaseactivity(IDbManager dbManager = null) 
{ 
    DbManager dbManager = dbManager ?? new DbManager(); 
    // ... 
} 

당신이 (이 일을 더 복잡하게하기 때문에, 내가 이것을 피하려고 것), 당신이 공장을 주입 할 필요 (가 ServiceclientFactory의 경우 것으로 보인다처럼) 인스턴스를 다시 작성해야하는 경우

:

public databaseactivity(ServiceclientFactory serviceClientFactory = null, /*...*/) 
{ 
    // ... 
    this.serviceClientFactory = serviceClientFactory ?? new DefaultServiceClientFactory(); 
} 

public int insert(bo obj) 
{ 
    serviceClient = this.serviceClientFactory.CreateServiceClient(); 
    serviceClient.insert(obj); 
} 
+0

코드를 변경할 수 없을 때 단위 테스트의 이점을 누릴 수 있을지 모르겠습니다. 기존 오류를 해결할 수없는 경우 왜 기존 오류를 신경 써야합니까? 코드를 변경할 수 없을 때 더 이상 아무것도 지울 수 없습니다. –

+0

은 마이크로 소프트의 두더지가 코드를 모의 할 수 있습니까? DI를 구현하지 않고 있습니까? – manikandan