在 Eclipse 中使用
失敗并顯示以下訊息:
java.lang.Exception: 沒有找到匹配的測驗 [{ExactMatcher:fDisplayName=test[1: A2 --> [Ljava.lang.String;@1e4a7dd4]], {ExactMatcher:fDisplayName=test[1: A2 --> Ljava .lang.String;@1e4a7dd4]] 來自 org.junit.internal.requests.ClassRequest@6c3f??5566

我很確定這是因為 JUnit 不“喜歡”我的陣列。在某些情況下:我使用它來說明由于外部環境,被測代碼可以為特定測驗用例產生兩種結果之一。
這是一些重現此內容的代碼:
package com.stackexchange.toolbox;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class Tester {
public Tester(String source, Object target) {
this.source = source;
this.target = target;
}
private final String source;
private final Object target;
private static final Object[][] testCases = { { "A1", "B1" }, { "A2", new String[] { "B2", "C2" } } };
@Parameters(name = "{index}: {0} --> {1}")
public static Iterable<Object[]> data() throws Exception {
return new ArrayList<>(Arrays.asList(testCases));
}
@Test
public void test() throws Exception {
if (target instanceof String) {
Assert.assertEquals(source.charAt(1), ((String)target).charAt(1));
} else {
for (String target : (String[])this.target) {
Assert.assertEquals(source.charAt(1), target.charAt(1));
}
}
}
}
有沒有一種簡單的方法來解決這個問題,也許是Lists 或可變引數?大多數(100 多個)測驗用例都是簡單的“源”、“目標”條目,我想保持{ "A1", "B1" }.
uj5u.com熱心網友回復:
這似乎是 JUnit4 的一個限制(至少你在命令列上得到了同樣的錯誤)。
最簡單直接的解決方案是從 JUnit4遷移到 JUnit5,這也意味著更少的代碼:
package com.stackexchange.toolbox;
import java.util.Arrays;
import java.util.stream.Stream;
import org.junit.Assert;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
class Tester {
private static final Object[][] testCases = { { "A1", "B1" }, { "A2", new String[] { "B2", "C2" } } };
@ParameterizedTest(name = "{index}: {0} --> {1}")
@MethodSource("provideArguments")
void test(String source, Object target) {
if (target instanceof String) {
Assert.assertEquals(source.charAt(1), ((String)target).charAt(1));
} else {
for (String targetElement : (String[])target) {
Assert.assertEquals(source.charAt(1), targetElement.charAt(1));
}
}
}
static Stream<? extends Arguments> provideArguments() throws Exception {
return Arrays.stream(testCases).map(Arguments::of);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446513.html
