我想重设虚假通话记录或忽略通话。
伪断言的方法在经过测试的类构造函数的Init方法中调用,并且我想忽略此调用,因为它不是经过测试的 Action 的一部分。
这里有个例子:
[TestClass]
public class UnitTest1
{
private MyFakedClass myFakedObject;
private SUT sut;
[TestInitialize]
public void Init()
{
myFakedObject = A.Fake<MyFakedClass>();
sut = new SUT(myFakedObject); //constructor calls myFakedObject.AssertedMethod()
}
[TestMethod]
public void TestMethod1()
{
sut.TestedMethod(); //TestedMethod calls myFakedObject.AssertedMethod() again...
A.CallTo(() => myFakedObject.AssertedMethod()).MustHaveHappened(Repeated.Exactly.Once);
//...So this is false
}
}
最佳答案
我喜欢@forsvarir的回答。我倾向于认为构造函数内部的调用很重要。
但是,如果您确实需要这样做:
当 FakeItEasy版本≥3.2.0 时,可以使用ClearRecordedCalls
:
Fake.ClearRecordedCalls(fake);
当 2.0.0≤FakeItEasy版本时,请考虑forsvarir的减法(FakeItEasy: Reset Fake Calls History / Ignore Call)。
当 FakeItEasy版本时,可以使用范围:
[Test]
public void TestMethod1()
{
using (Fake.CreateScope())
{
sut.TestedMethod(); // calls myFakedObject.AssertedMethod() again
A.CallTo(() => myFakedObject.AssertedMethod())
.MustHaveHappened(Repeated.Exactly.Once);
}
}
使用范围会导致
MustHaveHappened
仅查看范围内的调用。如果想将
TestInitialize
保留在所有测试方法之外,还可以在TestCleanup
中创建范围,并在using
方法中进行处理。