gpt4 book ai didi

unit-testing - 单元测试流控制的模式是什么

转载 作者:行者123 更新时间:2023-12-01 08:41:37 24 4
gpt4 key购买 nike

我有一个方法可以检查一些假设,要么遵循快乐的路径,要么沿着不快乐的路径终止。我要么设计得不好,要么我错过了测试流控制的方法。

if (this.officeInfo.OfficeClosed)
{
this.phoneCall.InformCallerThatOfficeIsClosedAndHangUp();
return;
}
if (!this.operators.GetAllOperators().Any())
{
this.phoneCall.InformCallerThatNoOneIsAvailableAndSendToVoicemail();
return;
}
Call call=null;
forach(var operator in this.operators.GetAllOperators())
{
call = operator.Call();
if(call!=null) {break;}
}

等等。我已经注入(inject)了我的依赖项。我有我的模拟量。我可以确保调用这个或那个,但我不知道如何测试“返回”是否发生。如果 TDD 意味着在没有它的情况下测试失败之前我不会写一行,那我就卡住了。

你会如何测试它?或者有没有办法让它更容易测试?

更新:已经发布了几个答案,说我应该测试结果调用,而不是流控制。这种方法的问题是,每个测试都需要设置和测试其他测试的状态和结果。这看起来非常笨拙和脆弱。我不应该能够单独测试第一个 if 子句,然后单独测试第二个吗?我真的需要有一组开始看起来像 Method_WithParameter_DoesntInvokeMethod8IfMethod7IsTrueandMethod6IsTrueAndMethod5IsTrueAndMethod4IsTrueAndMethod3IsFalseAndMethod2IsTrueAndMethod1isAaaaccck() 的对数扩展测试吗?

最佳答案

我认为您想测试程序的输出:例如,当 this.officeInfo.OfficeClosed 然后程序确实调用 this.phoneCall.InformCallerThatOfficeIsClosedAndHangUp() 和不调用其他方法,例如 this.operators.GetAllOperators()

我认为您的测试通过询问其模拟对象(phoneCall 等)调用了它们的哪些方法,或者让它们在调用它们的任何方法时抛出异常来做到这一点没想到。

一种方法是制作程序输入(例如'OfficeClosed返回true')和输出的日志文件:然后运行测试,让test 生成日志文件,然后断言生成的日志文件的内容与该测试的预期日志文件内容匹配。

关于unit-testing - 单元测试流控制的模式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1877921/

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