我有两种方法,如下所示。
public bool IsSuccess()
{
// Some logi
}
public bool ShouldSendLogic()
{
var status = IsSuccess();
if(status)
{
SendInvoice();
// do some operation
}
return status;
}
现在我正在编写集成/单元测试。我可以调用ShouldSendLogic,但我想通过将Success设置为false来确保不调用SendInvoice。 (只是否定的情况)。如何为这个场景编写测试用例,请帮我一个代码。
答案 0 :(得分:-2)
您可以将ShouldSendLogic()
更改为接受状态为参数bool ShouldSendLogic(bool status)
。通过这种方式,可以测试ShouldSendLogic
的正面和负面情况。
另一种方法是让IsSuccess()
部分接口并将依赖项注入到具有ShouldSendLogic()
的类中。可以通过单元测试环境中的模型类修改IsSuccess()
结果,并可以针对不同的状态值测试ShouldSendLogic()
。
class MyClass
{
ISomeInterface _interfaceObj;
public MyClass(ISomeInterface interfaceObj)
{
_interfaceObj = interfaceObj;
}
public bool ShouldSendLogic()
{
var status = _interfaceObj.IsSuccess();
if (status)
{
SendInvoice();
// do some operation
}
return status;
}
}
修改强>
通过将检查成功的代码分离到接口,您现在可以在单元测试中创建“模拟”对象,您可以在其中决定IsSuccess()的值应该是什么。
e.g。
public class MockSuccessClass : ISomeInterface
{
public bool IsSuccess { return true; }
}
然后在单元测试的“排列”部分,您可以创建MockSuccessClass的实例并将其传递给SUT。
您不必使用Moq,但如果您让Moq为您创建Mock类,则可以节省时间。