Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何编写使用return关键字的单元测试用例?_C#_Unit Testing - Fatal编程技术网

C# 如何编写使用return关键字的单元测试用例?

C# 如何编写使用return关键字的单元测试用例?,c#,unit-testing,C#,Unit Testing,我正在为我的类编写单元测试用例,我有一个场景需要编写单元测试 public void CheckModelDetail(ProductModel model) { if (executeTemodel == null) { return; } checkModel(); } 因此,我不确定如何检查返回声明。这里的流行语和大量文献都有明显的效果。通常是状态更改、返回值或是否引发异常 例如,如果您想测试没有异常

我正在为我的类编写单元测试用例,我有一个场景需要编写单元测试

 public void CheckModelDetail(ProductModel model)
 {
       if (executeTemodel == null)
       {
            return;
       }

       checkModel();
 }

因此,我不确定如何检查返回声明。

这里的流行语和大量文献都有明显的效果。通常是状态更改、返回值或是否引发异常

例如,如果您想测试没有异常被抛出可观察效果,那么您不需要在任何输出上断言:

public void ShouldNotThrowException()
{
    var objectUnderTest = new YourClass();
    objectUnderTest.CheckModelDetail(null);
}
尝试删除if-executeTemodel==null子句,您将看到您的测试在checkModel中的某个地方失败,假定您访问了其中的模型成员。任何未处理的异常都会导致测试失败

您可以使用的使其更加明确:

public void ShouldNotThrowException()
{
    var objectUnderTest = new YourClass();
    Should.NotThrow(() => objectUnderTest.CheckModelDetail(null));
}
这不仅测试了您的代码,而且让任何阅读您的测试代码的人都清楚您的期望


如果您想断言没有调用checkModel,那么应该将该方法移动到另一个类中,并使用Mock see来获得一个良好的概述。但我不确定作为CheckModelDetail的消费者,您是否关心这一点。您应该测试您想要发生的事情,即没有抛出异常,模型被接受为有效,模型被认为无效。。。与实现方式相反,即通常不调用checkModel,因此只要接口不变,您就可以自由重构实现。

这里的流行语和大量文献都有明显的效果。通常是状态更改、返回值或是否引发异常

例如,如果您想测试没有异常被抛出可观察效果,那么您不需要在任何输出上断言:

public void ShouldNotThrowException()
{
    var objectUnderTest = new YourClass();
    objectUnderTest.CheckModelDetail(null);
}
尝试删除if-executeTemodel==null子句,您将看到您的测试在checkModel中的某个地方失败,假定您访问了其中的模型成员。任何未处理的异常都会导致测试失败

您可以使用的使其更加明确:

public void ShouldNotThrowException()
{
    var objectUnderTest = new YourClass();
    Should.NotThrow(() => objectUnderTest.CheckModelDetail(null));
}
这不仅测试了您的代码,而且让任何阅读您的测试代码的人都清楚您的期望


如果您想断言没有调用checkModel,那么应该将该方法移动到另一个类中,并使用Mock see来获得一个良好的概述。但我不确定作为CheckModelDetail的消费者,您是否关心这一点。您应该测试您想要发生的事情,即没有抛出异常,模型被接受为有效,模型被认为无效。。。与实现方式相反,即通常不调用checkModel,因此只要接口不变,您就可以自由重构实现。

一种可能的方法是模拟类,使用null调用CheckModelDetail,并验证从未调用过checkModel。例如,使用:


一种可能的方法是模拟类,使用null调用CheckModelDetail,并验证从未调用过checkModel。例如,使用:


在测试用例中,您应该确保executeTemodel为null时未调用checkModel。可以使用模拟框架或通过创建从业务类派生的虚拟类并重写某些方法或设置标志来完成。当您“返回”代码时,您的代码期望输出某个值。您上面的代码没有返回任何内容。如果你只是想突破If的障碍。使用“break”。但是,如果您要返回一些东西,请将您的方法从'void'@RezaAghaei更改,这没关系。我必须为返回的if条件编写一个测试用例。在其他测试用例中处理其他事情。checkModel做什么?我假设它会检查模型是否有效,或者什么的,然后呢?它抛出了异常还是什么?它是公共方法还是私有方法?在测试用例中,您应该确保executeTemodel为null时没有调用checkModel。可以使用模拟框架或通过创建从业务类派生的虚拟类并重写某些方法或设置标志来完成。当您“返回”代码时,您的代码期望输出某个值。您上面的代码没有返回任何内容。如果你只是想突破If的障碍。使用“break”。但是,如果您要返回一些东西,请将您的方法从'void'@RezaAghaei更改,这没关系。我必须为返回的if条件编写一个测试用例。在其他测试用例中处理其他事情。checkModel做什么?我假设它会检查模型是否有效,或者什么的,然后呢?它抛出了异常还是什么?它是公共方法还是私有方法?