我想验证我测试的方法使用不同的参数多次调用服务。服务方法具有一个必需参数和一个可选参数:
public void Foo(object o1, object[] o2 = null);
我期望Foo
被调用2次,一次不使用,一次使用可选参数。可选参数应与条件匹配。为了测试这一点,我使用了FakeItEasy中的MustHaveHappenedOnceExactly
:
A.CallTo(() => testee.Method(A<object>.That.IsNotNull(), A<object[]>.That.IsNull()))
.MustHaveHappenedOnceExactly().Then(
A.CallTo(() => testee.Method(A<object>.That.IsNotNull(), A<object[]>.That.Matches(p => p.Length == 2)))
.MustHaveHappenedOnceExactly());
我得到的是以下异常:
FakeItEasy.UserCallbackException:参数匹配器
(p.Length> == 2)>引发了异常。有关详细信息,请参见内部异常。 ---> System.NullReferenceException:对象引用未设置为对象的实例。
我假设MustHaveHappenedOnceExactly
检查具有定义的匹配项的Foo
上的所有调用,因此,在没有参数的情况下调用Foo时,第二个匹配项将引发异常。如何避免该异常并仍然测试Foo是否使用特定参数被调用过一次?
答案 0 :(得分:1)
重构匹配器以适应空值,即.Matches(p => p != null && p.Length == 2)
A.CallTo(() => testee.Method(
A<object>.That.IsNotNull(),
A<object[]>.That.IsNull()
)
).MustHaveHappenedOnceExactly()
.Then(A.CallTo(() => testee.Method(
A<object>.That.IsNotNull(),
A<object[]>.That.Matches(p => p != null && p.Length == 2) //<--
)
).MustHaveHappenedOnceExactly()
);