(C#, Rhino Mocks, MbUnit).관찰 가능한 상태 변경이없는 메소드를 테스트하는 유닛
AccountManager라는 클래스에는 RegisterUser() 메서드가 있습니다. 이 메서드는 void를 반환하지만 오류가 발생할 경우 예외를 throw합니다. AccountManager는 AddUser() 메서드를 호출하는 IDataRepository를 호출하여 데이터베이스 삽입을 수행합니다.
Rhino Mock을 사용하여 IDataRepository를 조롱하고 저장소에서 발생하는 예외를 시뮬레이트하는 주어진 인수 집합에 대해 예외 및 예외가 발생했습니다.
[Test]
public void RegisterKnownUser()
{
MockRepository mocks = new MockRepository();
IDataRepository dataRepository = mocks.StrictMock<IDataRepository>();
using (mocks.Record())
{
Expect.Call(() => dataRepository.AddUser("abc", "abc", "[email protected]", "a", "bc")).Throw(
new InvalidOperationException());
}
using (mocks.Playback())
{
AccountManager manager = new AccountManager(dataRepository);
Assert.Throws(typeof (InvalidOperationException),() => manager.RegisterUser("abc", "abc", "[email protected]", "a", "bc"));
}
}
이 테스트는 정상적으로 작동합니다.
제 질문은 RegisterUser에 제공된 args가 올 바르고 유효한지 여부에 관한 것입니다. 실제 IDataRepository는 아무 것도 반환하지 않으며 예외가 발생하지 않습니다. 따라서 짧은 AccountManager의 상태는 변경되지 않았습니다. 이 말은 AccountManager.RegisterUser를 테스트 할 필요가 없기 때문에 테스트 할 클래스와 메소드에서 직접 관찰 할 수있는 결과가 아닐 수 있습니다. 가짜의 상태에 대한 테스트는 나에게 약간의 냄새를 맡는다. 나는 IDataRepository.AddUser를 개별적으로 테스트하는 한, AccountManager.RegisterUser를 클래스에서 관찰 할 수없는 결과가 나오는지 테스트 할 필요가 없어야한다고 생각합니다.
미리 감사드립니다.
Ribgy : 설명하려는 테스트 케이스에 대한 코드를 제공 할 수 있습니까? AccountManager가 dataRepository를 호출할까요? –