【发布时间】:2022-02-11 00:01:04
【问题描述】:
我是 FakeItEasy 的新手,如果解决方案很明显,我很抱歉。
这是重现问题的简化代码:
我有一个基类:
public abstract class BaseClass
{
public void Do()
{
Do_Override();
}
protected abstract void Do_Override();
}
还有一个派生的:
public class ImplementingClass: BaseClass
{
protected override void Do_Override()
{
ProtectedDo();
}
protected virtual void ProtectedDo()
{
}
}
在我的测试中,我想查看是否调用了 ProtectedDo()。我尝试以两种方式进行测试,但测试失败并显示相同的消息:
第一。在调试模式下它没有进入Do_Override()
public class ImplementingClassShould
{
[Fact]
public void Run_ProtectedDo()
{
var fake = A.Fake<ImplementingClass>();
fake.Do();
A.CallTo(fake).Where(_ => _.Method.Name == "ProtectedDo").MustHaveHappened();
}
}
第二。在调试模式下,它进入Do_Override()
public class ImplementingClassShould
{
[Fact]
public void Run_ProtectedDo_V2()
{
var sut = new ImplementingClass();
var sutFakeWrapper = A.Fake<ImplementingClass>(_ => _.Wrapping(sut));
sutFakeWrapper.Do();
A.CallTo(sutFakeWrapper).Where(_ => _.Method.Name == "ProtectedDo").MustHaveHappened();
}
}
失败消息:
【问题讨论】:
-
嗨,@fmm。我喜欢简化的重现,但通常最好指出您的经验中出了什么问题。例如,您为什么不认为您的代码有效?
-
嗨,@BlairConrad。我已经用测试失败的消息更新了我的问题。也是我第二次尝试测试。谢谢。