2009-09-27 5 views
0
[Test] 
public void TestUserProfileInsert() 
{ 
    using (new TestBindingsWrapper("TestBindings", "", new TestModule())) 
    { 
    // Setup the mock the dataprovider 
    MyMocks.MockDataProvider.Setup(x => x.InsertUserProfile(It.IsAny<IUserProfile>())).Returns(1); 

    IUserProfile up = new UserProfile(); 

    IUserProfileManager manager = new UserProfileManager(); 
    int result = manager.Insert(up); 
    Assert.AreEqual(1, result); 
    MyMocks.MockDataProvider.Verify(x => x.InsertUserProfile(up), Times.Once()); 
    } 
} 

나는 또한 ninject를 사용하고 있습니다. 반환 값을 설정하고 있기 때문에 실제로 테스트중인 것은 농담입니까, 아니면 누락 되었습니까?이 mbunit 테스트는 실제로 중요한 작업을 수행합니까?

+0

왜 개체를 활성화하려면 Ninject'Get' 메서드를 호출하지 않습니까? –

답변

0

manager.Insert (up)은 성공 (또는 실패)에 대한 예상 리턴 코드를 반환하는 것으로 테스트하고 있습니다. 마지막 줄에서 제공 한 모의 객체에 이것은 기본적으로 UserProfileManager가 제공하는 데이터 공급자의 데이터를 올바르게 전달하고 사용하는지 확인하기 위해 테스트합니다.

참고 :이 테스트를 더 잘 수행하려면 모의 반환을 7로 설정하고 7을 확인하는 것이 좋습니다 UserProfileManager 객체가 항상 1을 반환한다는 7을 리턴 할 확률이 더 낮습니다.

+0

하지만 데이터베이스에 삽입됩니까? 삽입은 새로 삽입 된 객체의 ID를 반환합니다. ID는 db의 PK 컬럼입니다. – user179764

+0

이 예제에서는 1이 mock 객체의 반환임을 거의 확신합니다. 더 많이 알 필요가 있다면, 함께 일하는 누군가와 이야기를해야합니다. 모의 작업 방법을 알고 있습니다. 회사의 테스트 프레임 워크가 어떻게 설정되었는지는 마술처럼 말할 수 없습니다. – tster

0

테스트를 작성할 때, 당신은 firs 예상치 못한 방식으로 코드를 실행하려고합니다 (새 코드의 예상 기능 또는 현재 동작 중 하나). 그 후에 만 ​​ 코드를 만들거나 테스트를 수정하여 통과 시키십시오. 따라서 이것이이 시험과 관련하여 당신의 주된 질문이라면, 나는 한 걸음 뒤로 물러나서 정말로 시험하고 싶은 것을 자문 해보십시오.

코드는 Integration Test보다 보다 냄새가 좋으므로 어떻게하려고합니까? 귀하의 의견은 당신이 데이터베이스에 삽입에 대해 걱정하고 있음을 암시합니다. 아직 일부 객체를 조롱하고 있습니다. 단위 테스트의 경우 너무 많은 구체적인 객체 (예 : UserProfileManager)를 수동으로 초기화하는 것을 보니 놀랍습니다. MockDataProvider은 실제로 실행 경로를 어디에 입력합니까?

관련 문제