我希望在单元测试中强制执行规则,以便新代码不违反规则。但是我想在生产环境中打印出警告,以便在我清理它的时候允许生产功能。
我想知道Java是否可以以干净的方式完成上述操作? 谢谢!
答案 0 :(得分:1)
我可以想到几种方法:
其中大多数都不会在生产中给你警告。但他们也不会在生产中失败。
最好的做法取决于您要检查的规则。
答案 1 :(得分:0)
你可以使用断言
断言是java中的一个语句。它可以用来测试你对程序的假设。 在执行断言时,它被认为是真的。如果失败,JVM将抛出名为AssertionError的错误。它主要用于测试目的。
它提供了一种检测和纠正编程错误的有效方法。
使用断言有两种方法。第一种方式是:
assert expression;
,第二种方式是:
assert expression1 : expression2;
有关详细信息,请参阅此链接:http://javarevisited.blogspot.com/2012/01/what-is-assertion-in-java-java.html
答案 2 :(得分:0)
您正在定义一个组件的两种不同行为。如果可能,定义组件以尊重这两种模式,并测试它们。
class YourClass {
private final boolean strictMode;
YourClass() {
this(false); // strict mode off by default
}
YourClass(boolean strictMode) {
this.strictMode = strictMode;
}
void yourMethod(Object parameter) {
if (parameter == null) {
if (strictMode)
throw new IllegalArgumentException();
else
System.err.println("YourClass.yourMethod parameter is null!")
}
}
}
class YourClassTest {
@Test public void yourMethodNonStrictModeShouldAllowNull() {
YourClass yourClass = new YourClass(false);
yourClass.yourMethod(null);
}
@Test(exception=IllegalArgumentException.class)
public void yourMethodStrictModeShouldThrowException() {
YourClass yourClass = new YourClass(false);
yourClass.yourMethod(null);
}
}
通过设置两种不同的模式,并记录和测试它们,您可以为测试提供最大的灵活性来选择其预期的严格程度 - 并允许您的完全测试的可重用组件在“严格模式”中使用清理完成后立即生产。
(您也可以选择使用参数构造函数 private ,并通过静态工厂方法(如YourClass.forUnitTesting()
)访问它。)