用于确保方法内部方法的单元测试未被调用

时间:2016-08-01 03:28:18

标签: c# unit-testing nunit integration-testing testcase

我有两种方法,如下所示。

public bool IsSuccess()
{
   // Some logi
}

public bool ShouldSendLogic()
{
  var status = IsSuccess();
  if(status)
  {
    SendInvoice();
   // do some operation
  }
 return status;
}

现在我正在编写集成/单元测试。我可以调用ShouldSendLogic,但我想通过将Success设置为false来确保不调用SendInvoice。 (只是否定的情况)。如何为这个场景编写测试用例,请帮我一个代码。

1 个答案:

答案 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类,则可以节省时间。