目前,我正在为一个工作流程创建一个TestCase,而工作流程有不同的步骤。 一步的结果很重要,因为第二步需要知道step1执行的价值。
class TestCaseWorkFlow1 extends TestCase {
private static String resultOfStep1 = null;
public void testStep1(){
if(failed){
resultOfStep1 = "failed";
}
}
public void testStep2(){
if(resultOfStep1 != null ) {
//First test failed.
}else {
}
}
}
目前我们使用静态变量在testmethods之间传递信息。
此方案的最佳解决方案是什么?
请帮忙。
由于 Ĵ
答案 0 :(得分:3)
这对我来说听起来不像是单元测试。没关系,但JUnit可能不是最好的工具。你能升级到JUnit 4吗? 假设是 -
Assume
验证第一步是否有效。答案 1 :(得分:2)
你的测试应该真正相互独立,所以想想是否有办法做到这一点。例如,您知道成功的step1的结果是什么,因此只需使用模拟对象或其他方法在步骤2中提供该输入。或者看看是否有办法打破步骤的顺序耦合,以便每个步骤可以独立运行。
答案 2 :(得分:1)
传统观点认为,最好的解决方案是通过私有帮助器方法从头开始为每个测试重新计算所有步骤,这样您就不依赖于JUnit执行测试的顺序(这是实际上没有定义为文本顺序)。你可能应该这样做,除非某些步骤需要花费相当多的时间来重新计算。
答案 3 :(得分:1)
您似乎正在努力实现超越单元测试的功能......这非常好。尝试使用构建在jUnit之上的其他工具,并为您提供测试行为的机制,而不是小代码单元。我成功使用一段时间的工具之一是jBehave。您最终将使用与方案步骤匹配的方法执行的纯文本脚本来描述测试方案。
答案 4 :(得分:0)
我同意基利安和格雷厄姆。测试应该是独立和独立的。即每个测试应该以与其他测试一起运行的方式单独运行。
但是如果你有充分的理由在测试之间存在这种依赖关系,那么可以试试TestNG。在TestNG中,您可以指定相互依赖的测试。
答案 5 :(得分:0)
正如其他人所说,你应该让你的测试彼此独立。实现此目的的一种方法是为每次测试正确设置测试夹具。
但是,您的示例中的测试看起来像是测试同一场景的不同阶段。因此,如果情况不太复杂,我会考虑将所有内容统一到一个测试方法中。
答案 6 :(得分:0)
在这个基本例子中,变量在测试A中被改变,并且可以在测试B中使用
public class BasicTest extends ActivityInstrumentationTestCase2 {
public BasicTest() throws ClassNotFoundException {
super(TARGET_PACKAGE_ID, launcherActivityClass);
}
public static class MyClass {
public static String myvar = null;
public void set(String s) {
myvar = s;
}
public String get() {
return myvar;
}
}
private MyClass sharedVar;
@Override
protected void setUp() throws Exception {
sharedVar = new MyClass();
}
public void test_A() {
Log.d(S,"run A");
sharedVar.set("blah");
}
public void test_B() {
Log.d(S,"run B");
Log.i(S,"sharedVar is: " + sharedVar.get());
}
}
输出结果是:
运行A
运行B
sharedVar是:blah