【发布时间】:2014-08-11 19:28:32
【问题描述】:
我在带有 NUnit 2.6.3 和 FakeItEasy 1.23.0 的 Mac OS X 10.9.4 上使用 Xamarin Studio 5.2。
当我对此代码运行测试时:
using System;
using ValueSet = System.Collections.Generic.HashSet<uint>;
using NUnit.Framework;
using FakeItEasy;
namespace SetTest
{
[TestFixture]
class TestFixture
{
[Test]
public void CallsUsersWithSetAndReducedSet()
{
var values = new ValueSet { 1, 2, 3 };
var setUser = A.Fake<SetUser>();
ClassUnderTest testInstance = new ClassUnderTest();
using (var scope = Fake.CreateScope())
{
testInstance.RunWith(setUser);
using (scope.OrderedAssertions())
{
A.CallTo(() => setUser.Use(A<ValueSet>.That.IsEqualTo(values))).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => setUser.Use(A<ValueSet>.That.Matches(set =>
set.Count == 2 && set.Contains(1)))).MustHaveHappened(Repeated.Exactly.Once);
}
}
}
}
public class SetUser
{
public virtual void Use(ValueSet set)
{
}
}
class ClassUnderTest
{
public static void Main(string[] arguments)
{
}
public void RunWith(SetUser setUser)
{
var values = new ValueSet { 1, 2, 3 };
setUser.Use(values);
values.Remove(3);
setUser.Use(values);
}
}
}
我得到以下错误输出:
FakeItEasy.ExpectationException: Assertion failed for the following call: SetTest.SetUser.Use(1[System.UInt32]>) 预计只找到一次,但在调用中找到 #0 次: 1. SetTest.SetUser.Use(set: System.Collection.Generic.HashSet1[System.UInt32]) 重复2次
我不明白导致此故障的原因以及如何解决它。 要通过这种类型的测试需要什么?
【问题讨论】:
-
我在任何地方都看不到
values被传递到任何对象中,那么您的验证器如何匹配?如果另一个ValueSet在您未提供的代码中创建,那么ThatIsEqualTo()可能正在测试引用相等性?如何为ValueSet定义相等性? -
有两个 ValueSet 变量。一个在测试方法中,另一个在被测类的 RunWith 方法中。他们都设置了相同的值,所以从这个角度来看,期望似乎应该过去了。
标签: fakeiteasy