2010-06-14 41 views
4

当前我正在为一个工作流创建一个TestCase,并且工作流具有不同的步骤。 一步的结果很重要,因为第二步需要知道step1的执行的值。在junit测试用例中的测试方法之间传递信息

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

我会解释一下它更多。假设,我有一台服务器托管服务,所以工作流的步骤是 1.连接到服务器 2.提出请求 在步骤2,我需要验证服务器是否连接。所以我需要的是第一步中的连接对象。 我不想再次连接,因为会话ID将有所不同。 – Jijoy 2010-06-14 12:01:00

回答

1

传统的智慧是最好的解决办法是有从头开始重新计算每个测试的所有步骤,通常在一个私人的辅助方法,让你不依赖于顺序哪个JUnit执行你的测试(这实际上并没有按照文本顺序定义)。你应该这样做,除非某些步骤需要真正可怕的时间重新计算。

2

你的测试应该真的是相互独立的,所以想想是否有办法做到这一点。例如,您知道成功的step1的结果是什么,所以只需使用模拟对象或其他方法将其作为步骤2中的输入提供即可。或者看看是否有办法打破这些步骤的顺序耦合,以便每个步骤可以独立运行。

0

我同意Kilian和Graham。测试应该是独立的和独立的。即每个测试都应该以与其他测试一样的方式单独运行。

但是,如果你在测试之间有这样的依赖性的一些很好的理由,也许尝试TestNG。在TestNG中,您可以指定相互依赖的测试。

1

看来你正试图实现超越单元测试的东西......这非常好。尝试使用构建在jUnit之上的其他工具,并为您提供测试行为的机制,而不是小的代码单元。我已经成功使用了一段时间的工具之一是jBehave。您将最终使用与脚本步骤匹配的方法执行的纯文本脚本来描述测试场景。

0

正如其他人所指出的,你应该让你的测试彼此独立。达到此目的的一种方法是为每个测试正确设置测试夹具。

但是,您的示例中的测试看起来像他们测试同一场景的不同阶段。所以我会考虑统一所有的测试方法,如果这种情况不是太复杂。

3

这听起来不像我的单元测试。这很好,但JUnit可能不是最好的工具。你能升级到JUnit 4吗? 假设是 -

  1. 写的JUnit运行,以确保您单位的顺序通过静态变量测试
  2. 通过状态。使用Assume验证第一步已经工作。
0
在该基本实施例

,该变量是在实验中的一个改变,并且可以在测试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());   
    } 

} 

输出的结果是:

运行甲

运行B

sharedVar is:blah