C# 如何使用FakeiTesy验证方法参数以及是否已进行调用
我正在使用FakeiTasy进行一些测试,但我遇到了一个问题。 在测试预期数据是否发送到伪造服务时,我希望能够看到错误数据。 现在我只看到电话从未发生过。 也许我的设置全错了,但我想知道一些如何纠正的提示。:) 我的情况是: 使用不同的值对同一服务进行两次调用。 我需要单独的测试来验证每个调用。 如果任何参数没有预期值,我希望得到一条错误消息,说明这一点。与执行Assert.AreEqual()时类似 现在我只收到“电话没有发生”,这是完全可以理解的,因为我意识到这就是我正在测试的。但我希望能够验证一个特定的调用只进行了一次,如果没有发生,我希望看到使用了哪些值来避免它发生 我使用了这个解决方案: 当我只有一个电话,但有两个电话,它不工作C# 如何使用FakeiTesy验证方法参数以及是否已进行调用,c#,fakeiteasy,C#,Fakeiteasy,我正在使用FakeiTasy进行一些测试,但我遇到了一个问题。 在测试预期数据是否发送到伪造服务时,我希望能够看到错误数据。 现在我只看到电话从未发生过。 也许我的设置全错了,但我想知道一些如何纠正的提示。:) 我的情况是: 使用不同的值对同一服务进行两次调用。 我需要单独的测试来验证每个调用。 如果任何参数没有预期值,我希望得到一条错误消息,说明这一点。与执行Assert.AreEqual()时类似 现在我只收到“电话没有发生”,这是完全可以理解的,因为我意识到这就是我正在测试的。但我希望能够
[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);
}
[TestFixture]
公共类TestClass
{
[测试]
公共void TestOne()
{
//安排
var fake=A.fake();
var a=新Foo(假);
//表演
a、 多斯塔夫(1);
//断言
A.CallTo(()=>false.DoOtherStuff(A.That.Matches(x=>x==2)))。必须发生(重复。准确地说。一次);
}
[测试]
公共测试二()
{
//安排
var fake=A.fake();
var a=新Foo(假);
//表演
a、 多斯塔夫(1);
//断言
A.CallTo(()=>false.DoOtherStuff(A.That.Matches(x=>x==3))。必须已经发生(重复。精确。一次);
}
}
公开课Foo
{
专用只读IBarservice(uBarService);
公共食品(IBarservice barservice)
{
_酒吧服务=酒吧服务;
}
公共无效数据集(int-someInt)
{
someInt++;
_酒吧服务。DoOtherStuff(someInt);
//我应该在这里再次增加一些int,但这是我的测试捕捉到的一个bug
_酒吧服务。DoOtherStuff(someInt);
}
}
公共接口IBarservice
{
void DoOtherStuff(int someInt);
}
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
...
fakeitesy.ExpectationException
以下调用的断言失败:
FakeItEasyQuestionsVS2015.IBarservice.DoOtherStuff((x==2)>)
预计只会找到一次,但在电话中发现了两次:
1:FakeiTeasyQuestions SVS2015.IBarservice.DoOtherStuff(someInt:2)重复2次
...
这表示调用DoOtherStuff
两次,每次都将someInt
作为值2
传入