Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Unit testing 测试内部类_Unit Testing_Tdd_Rhino - Fatal编程技术网

Unit testing 测试内部类

Unit testing 测试内部类,unit-testing,tdd,rhino,Unit Testing,Tdd,Rhino,如何将单元测试写入内部类?您编写的测试指定顶级类外部接口的行为。该类是否使用内部类来实现该行为,是该类的一个实现细节,测试不需要知道任何有关它的信息 如果无法通过顶级类的接口充分测试内部类,那么通常最好将内部类移出并直接作为新的顶级类进行测试。想要测试内部类是一种代码味道,即内部类可能足够重要,可以成为顶级类。使用MS Visual Studio进行单元测试时,您只需创建一个。我认为,在内部,它与反射一起工作。只需查看生成的代码。您不直接测试它。它将通过定义它的类进行测试 而且,如果您应用TDD

如何将单元测试写入内部类?

您编写的测试指定顶级类外部接口的行为。该类是否使用内部类来实现该行为,是该类的一个实现细节,测试不需要知道任何有关它的信息


如果无法通过顶级类的接口充分测试内部类,那么通常最好将内部类移出并直接作为新的顶级类进行测试。想要测试内部类是一种代码味道,即内部类可能足够重要,可以成为顶级类。

使用MS Visual Studio进行单元测试时,您只需创建一个。我认为,在内部,它与反射一起工作。只需查看生成的代码。

您不直接测试它。它将通过定义它的类进行测试


而且,如果您应用TDD,正如这个问题标签当前所暗示的,您刚刚编写的调用内部类的测试是什么?我的意思是,它不能是一个标准的班级,由你工作的班级私有吗

我们使用了一个helper类,它使用反射来加载和调用内部类上的方法。也可以在编译时使用调试符号更改可访问性

#if DEBUG
public
#else
internal
#endif
    class MyInternalClass
{
    ...
}

然而,Esko Luontola的答案更为正确,因为最重要的是功能或业务需求。很容易过于关注代码覆盖率,而不是测试重要的风险领域

我不推荐,但您也可以使用。

请参阅链接页面中的详细说明。链接页面不再可用。您说您不推荐此选项,但您将如何解决类似问题@托马斯:正如埃斯科在回答中所说的那样。要么通过公共接口间接测试内部API,要么将内部API升级为公共API并直接测试它们。