Jos*_*Noe 6 c# unit-testing fakeiteasy
使用FakeItEasy,如何检查我的对象的方法是否在同一个对象上调用另一个方法?
考试:
[TestMethod]
public void EatBanana_CallsWillEat()
{
var banana = new Banana();
var myMonkey = new Monkey();
myMonkey.EatBanana(banana);
//this throws an ArgumentException, because myMonkey is a real instance, not a fake
A.CallTo(() => myMonkey.WillEat(banana)
.MustHaveHappened();
}
Run Code Online (Sandbox Code Playgroud)
班级:
public class MyMonkey {
private readonly IMonkeyRepo _monkeyRepo;
public MyMonkey(IMonkeyRepo monkeyRepo) {
_monkeyRepo = monkeyRepo;
}
public void EatBanana(Banana banana) {
//make sure the monkey will eat the banana
if (!this.WillEat(banana)) {
return;
}
//do things here
}
public bool WillEat(Banana banana) {
return !banana.IsRotten;
}
}
Run Code Online (Sandbox Code Playgroud)
我愿意接受建议.如果我发现这一切都错了,请告诉我.
这是可以做到的。如果该WillEat方法是虚拟的 - 否则 FakeItEasy 将无法伪造它。
通过这一更改,您可以执行以下操作:
[TestMethod]
public void EatBanana_CallsWillEat()
{
var fakeMonkey = A.Fake<MyMonkey>();
fakeMonkey.EatBanana(new Banana());
A.CallTo(()=>fakeMonkey.WillEat(A<Banana>._)).MustHaveHappened();
}
Run Code Online (Sandbox Code Playgroud)
我仍然不相信这是一个好主意(正如我在评论中咆哮的那样)-我认为你最好依赖其他可观察的行为,但我不熟悉你的系统。如果您认为这是最好的方法,那么示例代码应该适合您。
| 归档时间: |
|
| 查看次数: |
4924 次 |
| 最近记录: |