我正在使用FakeItEasy进行一些测试,但我遇到了一个问题。 在测试将预期数据发送到伪造服务时,我希望能够看到错误数据。 现在我只看到呼叫从未发生过。 也许我把它搞错了,但后来我想要一些关于如何纠正它的提示。 :)
我的情况是: 两次调用同一服务,具有不同的值。 我想要单独的测试来验证每个电话。 如果任何参数没有预期值,我想得到一条错误消息,说明这一点。与您执行Assert.AreEqual()时类似。
现在我只得到“呼叫未发生”,这完全可以理解,因为我意识到这就是我正在测试的。但我希望能够验证特定呼叫只进行一次,如果没有发生,我希望看到哪些值用于不实现。
我使用了这个解决方案:http://thorarin.net/blog/post/2014/09/18/capturing-method-arguments-on-your-fakes-using-fakeiteasy.aspx 当我只有一个电话,但有两个电话时,它不起作用。
[TestFixture]
public class TestClass
{
[Test]
public void TestOne()
{
// Arrange
var fake = A.Fake<IBarservice>();
var a = new Foo(fake);
// Act
a.DoStuff(1);
//Assert
A.CallTo(() => fake.DoOtherStuff(A<int>.That.Matches(x => x == 2))).MustHaveHappened(Repeated.Exactly.Once);
}
[Test]
public void TestTwo()
{
// Arrange
var fake = A.Fake<IBarservice>();
var a = new Foo(fake);
// Act
a.DoStuff(1);
//Assert
A.CallTo(() => fake.DoOtherStuff(A<int>.That.Matches(x => x == 3))).MustHaveHappened(Repeated.Exactly.Once);
}
}
public class Foo
{
private readonly IBarservice _barservice;
public Foo(IBarservice barservice)
{
_barservice = barservice;
}
public void DoStuff(int someInt)
{
someInt++;
_barservice.DoOtherStuff(someInt);
// I should have increased someInt here again, but this is a bug that my tests catches
_barservice.DoOtherStuff(someInt);
}
}
public interface IBarservice
{
void DoOtherStuff(int someInt);
}
答案 0 :(得分:1)
Markus,我发表评论说我已经编辑了,因为我犯了一个错误。
你说你只得到“呼号没有发生”和
...我希望能够验证特定呼叫只进行一次,如果没有发生,我希望看到哪些值用于不实现。
我担心我不明白你想要的信息,因为当我跑TestOne
时,我得到了
FakeItEasy.ExpectationException
Assertion failed for the following call:
FakeItEasyQuestionsVS2015.IBarservice.DoOtherStuff(<x => (x == 2)>)
Expected to find it exactly once but found it #2 times among the calls:
1: FakeItEasyQuestionsVS2015.IBarservice.DoOtherStuff(someInt: 2) repeated 2 times
...
这表示致电DoOtherStuff
两次,someInt
每次传入的值为2
。