JUnit 4.12
public class StaticFieldsUtils {
public static <T> T getPublicStaticFieldByName(String name, Class<T> clazz){
for(Field f : clazz.getDeclaredFields()){
if(Modifier.isStatic(f.getModifiers()) &&
Modifier.isPublic(f.getModifiers()) &&
f.getName().equals(name))
try {
Object fieldValue = f.get(null);
if(clazz.isAssignableFrom(fieldValue.getClass()))
return (T) fieldValue;
} catch (IllegalAccessException e) {
throw new IllegalArgumentException(String.format("Invalid access to the field %s", name));
}
}
throw new IllegalArgumentException(String.format("A public field with the name %s does not exist in the class %s", name, clazz.getSimpleName()));
}
//Some other utility methods
}
public class StaticFieldsUtilsTest {
private static class StaticFieldContainer{
public static final StaticFieldContainer FIELD1 = new StaticFieldContainer();
public static final StaticFieldContainer FIELD2 = new StaticFieldContainer();
public static final StaticFieldContainer FIELD3 = new StaticFieldContainer();
public static final StaticFieldContainer FIELD4 = new StaticFieldContainer();
protected static final StaticFieldContainer FIELD5 = new StaticFieldContainer();
static final StaticFieldContainer FIELD6 = new StaticFieldContainer();
private static final StaticFieldContainer FIELD7 = new StaticFieldContainer();
public static StaticFieldContainer FIELD8 = new StaticFieldContainer();
}
@Test(expected=IllegalArgumentException.class)
public void testViolations(){
StaticFieldContainer field = StaticFieldsUtils.getPublicStaticFieldByName("FIELD5", StaticFieldContainer.class);
}
@Test(expected=IllegalArgumentException.class)
public void testViolations2(){
StaticFieldContainer field = StaticFieldsUtils.getPublicStaticFieldByName("FIELD6", StaticFieldContainer.class);
}
//ETC
}
使用JUnit理论和ExpectedException
规则:
@RunWith(Theories.class)
public class StaticFieldsUtilsTest {
//your inner class with static fields
@Rule
public ExpectedException thrown = ExpectedException.none();
@DataPoint
public static String FIELD1 = "Field1";
@DataPoint
public static String FIELD2 = "Field2";
@Theory
public void testViolations(String field){
thrown.expect(IllegalArgumentException.class);
StaticFieldsUtils.getPublicStaticFieldByName(field, StaticFieldContainer.class);
}
}
如果您想用其他名称应用许多理论,我建议创建一个自定义注释和parametersuppliver
。
我有一个返回类型为的方法。它还可以抛出许多异常,所以我想测试一下那些被抛出的异常。所有尝试都失败了,原因相同: 类型Stubber中的(T)不适用于参数(void)时的方法 有什么想法,我可以如何获得方法抛出一个指定的异常?
问题内容: 我有一个带有返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败: Stubber类型中的when(T)方法不适用于参数(void) 有什么想法可以获取引发指定异常的方法吗? 问题答案: 括号放置不正确。 您需要使用: 而 不是 使用: 在文档中对此进行了解释
我想使用测试异常是否工作良好。 例如,假设I test queue。
问题内容: 有没有一种方法(在编码时)知道在执行python代码时期望哪些异常?由于不知道会抛出哪种异常类型(并且不要告诉我阅读文档,所以很多时候我都会捕获90%的基础Exception类)。很多时候,异常可以从深处传播出去。次文档未更新或不正确)。有某种工具可以检查吗?(例如通过阅读python代码和库)? 问题答案: 我猜一个解决方案可能只是不精确,因为缺少静态的输入规则。 我不知道有什么工具
我有两个模块,一个从rest模板调用另一个。(管理员调用notifServer)notifServer有一个用Async注释的方法。我想在该方法中抛出一个异常,但管理员获取响应太快,并且无法在admin中捕获异常方法。 我是spring和@Async进程的新成员。我已经尝试将响应主体从NotifServer映射到C的CompletableFuture。类 。但我仍然没有得到错误响应。 此代码来自管
考虑以下代码: 我想做的是,在异常测试中,标记我希望调用doSomething1()。然而,在转换器上抛出异常。convert(),这意味着永远不会调用verify()调用。因此,verifyNoMoreInteractions()在after()中失败。 注意:这是一个非常通用的示例,用于隐藏我们的任何内部代码。