Rhino Mock에 약간의 문제가 있습니다.Arg.Matches()가 기본값 (T)을 반환하지 않아야 함을 지정하는 방법
나는 (문자열 아래의 샘플에서) 객체를 기대하는 메소드를 가진 추상 클래스를 가지고있다. 이 메소드는 인수가 null인지 확인합니다.
public class Baz
{
private readonly Foo foo;
public Baz(Foo foo)
{
this.foo = foo;
}
public void DoWork(string s)
{
s = "xxx" + s;
this.foo.DoSomething(s);
}
}
내가 단위 테스트를하고 클래스 Foo
의 DoSomething
가 올바른 인수로 호출되어 있는지 확인하려면 :
public abstract class Foo
{
public void DoSomething(string bar)
{
if (bar == null)
{
throw new ArgumentNullException("bar");
}
}
}
나는 Foo
를 사용하는 다른 클래스가 있습니다. 나는 이것에 Arg<T>.Matches()
을 사용했습니다. 나는이 테스트를 실행하려고하면
[Test]
public void TestMethod()
{
var fooMock = MockRepository.GenerateMock<Foo>();
var objectUnderTest = new Baz(fooMock);
fooMock.Expect(x => x.DoSomething(Arg<string>.Matches(Text.StartsWith("xxx"))))
.Repeat.Once();
objectUnderTest.DoWork("hello");
fooMock.VerifyAllExpectations();
}
은 지금의 Expect(...)
에서 ArgumentNullException
가 발생합니다. Rhino Mocks의 코드를 살펴보면 Match()
-Method가 항상 default(T)
을 반환한다는 것을 알았습니다.이 문자열은 문자열 (및 모든 다른 클래스)에 대해 null
입니다. 따라서 DoSomething()
의 수표는 ArgumentNullException
입니다.
내가 알고 있듯이 Foo
에 대한 인터페이스를 추출하여 해당 인터페이스의 모의 객체를 만들 수 있으므로 null 확인이 필요하지 않습니다. 하지만 Rhino Mocks에서 코드를 그대로두면 문제가 해결되는지 알기를 원합니다 (단위 테스트 제외 :-)).