max*_*e51 5 c# unit-testing mocking fakeiteasy
我想重置虚假呼叫历史记录或忽略呼叫.
在测试类构造函数的Init方法中调用伪断言方法,我想忽略此调用,因为它不是测试操作的一部分.
这是一个例子:
[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
}
}
Run Code Online (Sandbox Code Playgroud)
我喜欢@ forsvarir的回答.我倾向于认为构造函数中的调用很重要.
但是,如果你真的需要这样做:
当FakeItEasy版本≥3.2.0时,您可以使用ClearRecordedCalls:
Fake.ClearRecordedCalls(fake);
Run Code Online (Sandbox Code Playgroud)
当2.0.0≤FakeItEasy版本<3.2.0时,请考虑forsvarir的减法方法(FakeItEasy:重置虚假呼叫历史记录/忽略呼叫).
当FakeItEasy版本<2.0.0时,您可以使用范围:
[Test]
public void TestMethod1()
{
using (Fake.CreateScope())
{
sut.TestedMethod(); // calls myFakedObject.AssertedMethod() again
A.CallTo(() => myFakedObject.AssertedMethod())
.MustHaveHappened(Repeated.Exactly.Once);
}
}
Run Code Online (Sandbox Code Playgroud)
使用范围会导致MustHaveHappened仅查看范围内的调用.
如果您想保留所有测试方法的外部,TestInitialize也可以在TestCleanup方法中创建范围并将其处理using.
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |