我编写了一个框架,增加了对其接口进行类型安全调用的可能性。现在,在编写JUnit测试时,我想表明编译器现在检查了早先导致运行时错误的特定表达式。
// this does not compile, because nameProp is of type Property<String>
Integer name = interface.getProperty(nameProp);
可能最好简单地将代码注释掉并保留原样。我只是想知道是否可以使用某些测试框架来编写类似
的内容assertCompilationError() {
Integer name = interface.getProperty(nameProp);
}
我明确地不希望自己使用自定义类路径调用javac。如果有可能将一般解决方案提取到框架代码(并捐赠给JUnit或TestNG),那么这种解决方案也会受到欢迎。
答案 0 :(得分:2)
你不能运行JUnit,直到它编译为止这个检查为时已晚。
您不能使用库来允许编译的代码进行编译,以便检查它是否可以编译。
答案 1 :(得分:1)
如果你能通过一些java脚本语言实现这一点,我会很好奇,我会详细检查beanshell和groovy,也许它们会提供你可以使用的东西。
因为据我所知,你可以从java程序中调用它们的脚本(在你的情况下是JUnit测试)。
然而,最重要的问题是:
答案 2 :(得分:1)
其实你可以:
public static void assertCompilationError() {
try {
Integer name = (Integer)(Object)interface.getProperty(nameProp);
} catch (Exception e) {
//...
}
}
答案 3 :(得分:0)
过了一段时间,我找到了以下软件:
http://docs.codehaus.org/display/JANINO/Home
看起来应该可以做一些破解,以便只编译有问题的块。现在,我的例子无论如何都行不通,因为它还不支持泛型。