2010-12-15 3 views
3

Nunit을 사용하여 C#의 테스트 중심 개발을위한 자습서를 끝 냈습니다. 이제는 새 프로젝트에 단위 테스트를 사용하고 싶지만 테스트를 작성하는 데 어려움이 있습니다. 데이터베이스 또는 웹 서비스 액세스와 관련된 클래스에 대한 단위 테스트를 가장 잘 작성하려면 어떻게합니까? 누군가 수업/단위 테스트의 예를 나에게 줄 수 있습니까?데이터베이스 및 Exchange Server Access와 관련된 클래스를 테스트하려면 어떻게합니까?

답변

5
  • 디자인 이메일을 보내 DB를 호출하는 기능을 포장하는 인터페이스, ...
  • 이 클래스의 구현을 작성하고 사용 종속 클래스에서이 클래스를로드 DI
  • 를 사용하여 모의 프레임 워크 Mock 객체를 만들고 유닛 테스트에서 기대치를 설정하십시오. 당신이 RealEmailer을 테스트하는 경우가,

    interface IEmailer 
    { 
        void Send(Email email); 
    } 
    
    class RealEmailer : IEmailer 
    { 
        public void Send(Email email) 
        { 
         // send 
        } 
    } 
    
    class UsesEmailer 
    { 
        private IEmailer _emailer; 
    
        public UsesEmailer(IEmailer emailer) 
        { 
         _emailer = emailer; 
        } 
    
    
        public foo(Email email) 
        { 
         // does other stuff 
         // ... 
         // now sends email 
         _emailer.Send(email); 
        } 
    
    } 
    
    class MyUnitTest 
    { 
        [Test] 
        public Test_foo() 
        { 
         Mock<IEmailer> mock = new Mock<IEmailer>(); 
         Email m = new Email(); 
         mock.Expect(e => e.Send(It.Is<Email>(m))); 
         UsesEmailer u = new UsesEmailer(mock.Object); 
         u.Send(m); 
         mock.Verify(); 
        } 
    
    } 
    

    UPDATE 이제

    : 여기

은 샘플 의사 코드 (여기에 사용 된 모의 발생기는 MOQ 프레임 워크) 몇 가지 방법이 있지만 기본적으로 테스트를 설정하여 전자 메일을 보내고 체크 인해야합니다. 이것은 코드를 테스트하는 것이 아니라 구성, 네트워크, 교환 서버 등을 테스트하는 것이기 때문에 단위 테스트가 아닙니다. RealEmailer 코드를 작게 만들면 실제로 단위 테스트를 쓰지 않아도됩니다.

+0

답변 해 주셔서 감사합니다. DI가 의미하는 것은 무엇입니까? – Luke

+0

종속성 삽입입니다. NInject, Windsor Castle, StructureMap, Spring.NET 또는 Unity를 사용할 수 있습니다. 나는 윈저를 사용한다. – Aliostad

+0

질문이 하나 더 있습니다. moq를 Nunit과 함께 사용할 수 있습니까? – Luke

관련 문제