2013-12-18 2 views
0

RhinoMocks 및 MbUnit을 사용하여 아래 테스트 방법을 테스트하려고하지만 테스트를 통과 할 수 없습니다. 현재 오류는 ""에 대한 기대 호출을 찾을 수없는 경우입니다.RhinoMocks 및 mbunit을 사용하여 함수 내에서 새 Object를 테스트하는 방법

기능은 vb.net에 시험 아래 시험은 내가 현재 가지고있는 것입니다

Public Function Login(user As Website.BusinessObjects.User) As Integer Implements IActivityLog.Login 

     Dim item As BOAudit.IActivityLog = New BOAudit.ActivityLog(_request) 

     ' Activity 
     item.UserID = User.GuidID 
     item.Type = Enums.ActivityType.Login 
     item.Description = String.Format(If(IsAdmin, "Logged in as {0}", "Logged in"), User.FullName) 
     item.EventUserID = _authenticatedUser.GuidID 

     Return _dalActivityLog.Save(item) 

    End Function 

C#에서 내가 문제가 위에서 아래가 아닌 함수 내 새로운 객체를 선언하는 것입니다 생각 그 객체를 함수로 전달한다. 위의 함수를 테스트하는 가장 좋은 방법은 무엇이며 객체를 전달해야합니까?

[Test] 
    public void Login_Data_NewRecordCreated() 
    { 
     const int id = 99; 
     var data = new Website.CodeModules.BusinessObjects.Audit.ActivityLog(_request) 
     { 
      Type = Enums.ActivityType.Login, 
      Description = "Logged in", 
      EventUserID = _user.GuidID 
     }; 

     var user = _mocks.StrictMock<User>(); 

     using (_mocks.Record()) 
     { 
      Expect.Call(_dalActivityLog.Save(data)).Return(id); 
     } 

     using (_mocks.Playback()) 
     { 
      var result = _balActivityLog.Login(user); 

      Assert.AreEqual(id, result); 
     } 

    } 

답변

1

테스트에서 주장한 조건은별로 의미가없는 것 같습니다. 코드에서 _dalActivityLog의 mock 인스턴스가 설정 한 상수를 반환하는지 테스트하는 것으로 보입니다.

이 테스트에서는 구현이 아닌 Login 함수의 코드를 테스트해야합니다. 따라서 올바른 매개 변수가 전달되면 _dalActivityLog.Save가 호출되는지 확인해야합니다.

_dalActivityLog은 질문에 지정하지 않은 인터페이스를 구현하는 클래스의 인스턴스라고 가정합니다. IActivityLog이라고 부르 자. 그런 다음 테스트 코드에 모의 인스턴스를 설정해야합니다.

IActivityLog logMock = MockRepository.GenerateStub<IActivityLog>(); 

그런 다음 당신은이 (생성자 또는 속성을 통해) 로그인 메소드가 클래스의 인스턴스로 어떻게 든이 모의 인스턴스를 주입.

그런 다음 메서드를 호출하고 User의 인스턴스를 전달하십시오.

그런 다음 아래와 같이 _dalActivityLog.Save 호출에 대한 어설 션을 수행합니다.

logMock.AssertWasCalled(
    call => call.Save(
    Arg<Website.CodeModules.BusinessObjects.Audit.ActivityLog>.Matches(
     logItem => logItem.UserID == user.GuidID && logItem.Type == Enums.ActivityType.Login 
    ) 
) 
); 
관련 문제