在JUnit 4测试中,我有一个方法getValues()返回一个List<Double>我想要与引用列表进行比较的对象.到目前为止,我发现的最佳解决方案是使用org.hamcrest.collection.IsArray.hasItems和org.hamcrest.Matchers.closeTo喜欢这样:
assertThat(getValues(), hasItems(closeTo(0.2, EPSILON), closeTo(0.3, EPSILON)));
Run Code Online (Sandbox Code Playgroud)
这适用于仅返回少量值的测试.但是如果测试返回更多值,这绝对不是最好的方法.
我也尝试了以下代码.要编译的代码需要向下转换为Matcherbefore hasItems:
List<Matcher<Double>> doubleMatcherList = new ArrayList<Matcher<Double>>();
doubleMatcherList.add(closeTo(0.2, EPSILON));
doubleMatcherList.add(closeTo(0.3, EPSILON));
assertThat(getValues(), (Matcher) hasItems(doubleMatcherList));
Run Code Online (Sandbox Code Playgroud)
比较失败,我不明白为什么:
java.lang.AssertionError:Expected :(一个包含<[数字值<1.0E-6> <0.2>的数字,<1.0> -0> <0.3>的数值>]>的集合得到:<[ 0.2,0.30000000000000004]>
是否有更好的方法来比较两个大型双打名单?这里的困难是需要数值公差来验证结果getValues()是否等于我的参考列表.对于任何对象列表,这种比较似乎都很容易,但对于列表却没有Double.
我一直在将一个项目从 Java 8 迁移到 Java 12。除了单元测试之外,一切都很顺利。当我使用 Maven 编译和启动测试时,许多测试失败并显示以下消息:
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
at com.tetratech.csoft.ui.jfx.AppContextTest.<init>(AppContextTest.java:22)
Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in java.lang.CompoundEnumeration@35fd987b
Caused by: org.mockito.exceptions.base.MockitoInitializationException:
Could not initialize inline Byte Buddy mock maker. (This mock maker is not supported on Android.)
Java : 12
JVM vendor name : Oracle Corporation
JVM vendor version : 12+33
JVM name : OpenJDK 64-Bit Server VM
JVM version : 12+33
JVM info : mixed mode, …Run Code Online (Sandbox Code Playgroud) 与2的Mockito,应当ArgumentMarchers.any()被用来代替像更具体的匹配器ArgumentMatchers.anyString()或ArgumentMatchers.anyList()例如?应该使用特定的匹配器使代码更具可读性吗?
根据经验,使用本机时OBJETS( ,int,long,double),boolean特定的匹配器anyInt(),anyLong(),anyDouble()或anyBoolean()是优选的。但是其他匹配器呢?有任何想法吗?谢谢。