gpt4 book ai didi

c# - 在同一对象的另一个方法上使用 FakeItEasy 的 A.CallTo()

转载 作者:太空狗 更新时间:2023-10-29 21:39:55 24 4
gpt4 key购买 nike

使用 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();
}

类:

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;
}
}

我乐于接受建议。如果我做错了,请告诉我。

最佳答案

你为什么要模拟测试对象? 究竟您要测试什么?调用 WillEat 的验证没有什么值(value)。它向消费者提供什么信息?毕竟,消费者不关心方法是如何实现的。消费者关心的是结果

当猴子吃了没烂的香蕉会怎样?你的测试应该回答这个问题:

[TestMethod]
public void EatBanana_CAUSES_WHAT_WhenBananaIsNotRotten()
{
var repo = A.Fake<IMonkeyRepo>();
var monkey = new Monkey(repo);
var freshBanana = new Banana { IsRotten = false };

monkey.EatBanana(freshBanana);

// verifications here depend on what you expect from
// monkey eating fresh banana
}

请注意,您可以对 IMonkeyRepo 进行各种验证,它已在此处正确伪造和注入(inject)。

关于c# - 在同一对象的另一个方法上使用 FakeItEasy 的 A.CallTo(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17929758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com