我试图设置在4.11的JUnit一个参数测试,其生成单一的参数.但是,此参数必须是数组本身.
以下代码片段的预期行为test()是在第一次运行中arguments保存数组{"test1", "test2"}并{"test3", "test4"}在第二次运行中保存数组时运行两次.
@RunWith(Parameterized.class)
public class Tester {
@Parameter
private String[] arguments;
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][]{
{new String[] {"test1","test2"}},
{new String[] {"test3","test4"}}
}
);
}
@Test
public void test() {
fail();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我执行测试时,SlowCheckMemberAccess会抛出异常.Google没有针对此类问题提供任何结果.
任何人都可以解释这里出了什么问题吗?
未经过滤的JUnit跟踪是:
java.lang.IllegalAccessException: Class org.junit.runners.Parameterized$TestClassRunnerForParameters can not access a member of class org.mafagafogigante.dungeon.entity.creatures.Tester with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.checkAccess(Unknown Source)
at java.lang.reflect.Field.set(Unknown …Run Code Online (Sandbox Code Playgroud) 我List<String>需要查找特定字符串是否存在于List中.
对于Eg:
String str = "apple";
List<String> listObject = Lists.newArrayList("apple", "orange", "banana");
我需要查找是否str存在listObject使用Google Guava.
所以我需要一个true或一个false结果.
我怎样才能做到这一点?
根据java文档说:
在Iterable<T>允许一个对象被用作换每个语句的目标.
在java中,我们可以执行以下操作:
for (final <? super T> : T[]) {...}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,为什么java不能将T []类型的对象视为Iterable,因为以下崩溃时出现了不可比较的类型编译错误:
final Iterable<T> anIterable = T[];
Run Code Online (Sandbox Code Playgroud) 我看到一行代码如下:
for (String w : words) sentence.add(w); // words is declared as String[] words = ...;
Run Code Online (Sandbox Code Playgroud)
据我所知,我认为能够以这种格式编写for循环,我们需要'words'是一个实现Iterable接口并覆盖iterator()函数的类的实例.但'words'是String数组的类型,这对于循环格式如何正确?
有人可以给我一些提示吗?
java ×4
arrays ×1
collections ×1
exception ×1
foreach ×1
guava ×1
iterable ×1
junit ×1
reflection ×1