我对 Rhino Mocks 有一点问题。
我有一个抽象类,其方法需要一个对象(在字符串下面的示例中)。该方法检查参数是否为空。
public abstract class Foo
{
public void DoSomething(string bar)
{
if (bar == null)
{
throw new ArgumentNullException("bar");
}
}
}
我有另一个类,它使用Foo
:
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);
}
}
我想进行单元测试并检查是否使用正确的参数调用了DoSomething
类。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();
}
现在,当我尝试运行此测试时,出现了ArgumentNullException
at the Expect(...)
。我查看了 Rhino Mocks 的代码,发现Match()
-Method 总是返回default(T)
,这是null
一个字符串(以及所有其他类)。所以签入DoSomething()
引发了ArgumentNullException
.
我知道,我可以为该接口提取一个接口Foo
并创建该接口的模拟,因此没有空检查。但是我想知道Rhino Mocks是否可以通过保留代码原样来解决这个问题(当然单元测试除外;-))。