IAd*_*ter 12 java parameters junit junit-rule
我想创建@Rule能够做这样的事情
@Test public void testValidationDefault(int i) throws Throwable {..}
Run Code Online (Sandbox Code Playgroud)
其中i是参数传递给测试的@Rule.
不过我确实得到了
java.lang.Exception: Method testValidationDefault should have no parameters
Run Code Online (Sandbox Code Playgroud)
有没有办法绕过它并在@Rule?中设置i参数?
正如IAdapter所说,你无法使用规则传递参数,但你可以做类似的事情.
实现一个包含所有参数值的规则,并为每个参数值评估测试一次,并通过方法提供值,因此测试可以从规则中提取它们.
考虑像这样的规则(伪代码):
public class ParameterRule extends MethodRule{
private int parameterIndex = 0;
private List<String> parameters;
public ParameterRule(List<String> someParameters){
parameters = someParameters;
}
public String getParameter(){
return parameters.get(parameterIndex);
}
public Statement apply(Statement st, ...){
return new Statement{
public void evaluate(){
for (int i = 0; i < parameters.size(); i++){
int parameterIndex = i;
st.evaluate()
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你应该可以在这样的测试中使用它:
public classs SomeTest{
@Rule ParameterRule rule = new ParameterRule(ArrayList<String>("a","b","c"));
public void someTest(){
String s = rule.getParameter()
// do some test based on s
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21714 次 |
| 最近记录: |