Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/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
如何在Java中检测嵌套的单元测试类(不在测试文件夹下)_Java_Spring Boot_Maven_Unit Testing - Fatal编程技术网

如何在Java中检测嵌套的单元测试类(不在测试文件夹下)

如何在Java中检测嵌套的单元测试类(不在测试文件夹下),java,spring-boot,maven,unit-testing,Java,Spring Boot,Maven,Unit Testing,我知道测试Java语言的许多特性是相当困难的。例如,不可能测试类或类似方法的私有变量。 我通常通过创建一个嵌套类来解决这个问题,其中这个嵌套类是一个单元测试,这样: 公共类MyClass{ 私有字符串;私有字符串; //为简洁起见省略 @RunWith(MockitoJUnitRunner.class) 公共静态类MyClassUnitTest{ @莫基托注射液 MyClass myclassMocked; //等等。。。 } } 因此不需要反射/powermock或其他 这个结构帮助我测试

我知道测试Java语言的许多特性是相当困难的。例如,不可能测试类或类似方法的私有变量。 我通常通过创建一个嵌套类来解决这个问题,其中这个嵌套类是一个单元测试,这样:

公共类MyClass{
私有字符串;私有字符串;
//为简洁起见省略
@RunWith(MockitoJUnitRunner.class)
公共静态类MyClassUnitTest{
@莫基托注射液
MyClass myclassMocked;
//等等。。。
}
} 
因此不需要反射/powermock或其他

这个结构帮助我测试类中所有不可访问的成员或方法。 但似乎我也应该进行一个自动构建,maven将在其中查找这个嵌套类进行单元测试,并在部署中i
mvn clean test
时运行它

我一直在试图找到关于这个问题的任何答案,但没有找到任何maven或maven surefire插件的规范来说明“嘿,请查看src/main文件夹中的这些嵌套类,并将它们标记为单元测试”。此外,我正在使用springboot来打包我的所有项目(因此大多数依赖项都与spring相关)

有人想要解决吗


例如,不可能测试类或类似方法的私有变量

您不需要这样做-私有方法是私有的,它们由使用它们的测试方法间接测试

您不应该嵌入测试代码或lib,这样它们就必须与生产软件一起提供

不要做你提议的事

根据您的评论进行编辑:

至于如何从技术上做到这一点,Maven只支持1个测试源目录

您可以创建一个集成测试设置,在
src/main
目录中找到测试,但这对于Maven来说并不容易,因为Maven促进了sane模式,而您的模式不是其中之一


“例如,不可能测试类或类似方法的私有变量”-是的,而且完全没有必要。另外,将单元测试混合到生产代码中?这在很多层面上都是错误的…糟糕的想法,私人方法是通过观察其效果来间接测试的。我不同意。一些示例:-您可以有一个私有方法,并且基于一些其他服务,您使用该私有方法中的某些内容,并且您想知道结果-一个默认的包方法,这意味着您无法导入到src/test文件夹?它被称为嵌套(静态)类。嵌套类增加了单元测试的封装。您没有明确的错误原因(请提供)。单元测试应该简单地位于
src/test/java
中,而决不能位于
src/main/java
中。
src/main/
中的所有内容都将是打包到结果jar/war等中的生产代码的一部分。如果这将包含完全错误的测试代码。在生产代码中使用基于示例的代码也意味着在生产代码中必须具有类似JUnit和mockito的依赖项,这意味着罐子将成为最终包装的一部分,这也是错误的。一般来说,如果您需要测试私有方法,这意味着您在单个类中做的太多(单一负责原则)。这意味着您需要重构代码……不幸的是,这不是答案,而是建议。如果你能从技术上扩展你的答案,那就太好了…看我的编辑-从技术上讲Maven不支持>1个测试目录-@tepetrol这是一个答案,说明了你不应该这样做的原因…@mikeb这完全是错误的,因为你可以定义多个测试目录。最好不要这样做。除了带有模块的JDK9+之外,它还受到JDK本身的限制。。。