Java 使用Junit进行Webservice功能/集成测试

Java 使用Junit进行Webservice功能/集成测试,java,unit-testing,junit,integration-testing,fail-fast,Java,Unit Testing,Junit,Integration Testing,Fail Fast,这个问题旨在找到一个比我的更好的解决办法 我对集成测试有以下要求: 每个集成测试都在单个测试类中实现 测试类中的方法必须按顺序执行 每种方法都是集成/功能测试的一个步骤 如果某个测试方法失败,则必须跳过测试类中的所有其他测试方法,因为查找后续错误没有意义 我的解决方案如下所示: 我只是从抽象测试类继承了每个测试类: package myPackage; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList

这个问题旨在找到一个比我的更好的解决办法

我对集成测试有以下要求:

  • 每个集成测试都在单个测试类中实现
  • 测试类中的方法必须按顺序执行
  • 每种方法都是集成/功能测试的一个步骤
  • 如果某个测试方法失败,则必须跳过测试类中的所有其他测试方法,因为查找后续错误没有意义
  • 我的解决方案如下所示:

    我只是从抽象测试类继承了每个测试类:

    package myPackage;
    
    import java.util.List;
    import java.util.concurrent.CopyOnWriteArrayList;
    
    import org.junit.Before;
    import org.junit.Rule;
    import org.junit.rules.TestWatcher;
    
    public abstract class FailFastTest {
    
        private final static List<Class<?>> FAILED_CLASSES = new CopyOnWriteArrayList<Class<?>>() ;
    
        private final Class<? extends FailFastTest> thatClass = this.getClass();
    
        @Rule
        public final TestWatcher onFailedRule = new TestWatcher() {
            protected void failed(Throwable e, org.junit.runner.Description description) {
                FAILED_CLASSES.add(thatClass);
            };
        };
    
        @Before
        public final void beforeMethod() {
            final boolean failed = FAILED_CLASSES.contains(thatClass);
    
            if(failed) {
                System.out.println(thatClass + " FAILED. Aborting test.");
                org.junit.Assume.assumeTrue(!failed);
            }
         }
    }
    
    package-myPackage;
    导入java.util.List;
    导入java.util.concurrent.CopyOnWriteArrayList;
    导入org.junit.Before;
    导入org.junit.Rule;
    导入org.junit.rules.TestWatcher;
    公共抽象类FailFastTest{
    私有最终静态列表>();
    
    private final Class你能使用TestNG吗?它允许对测试进行排序,使你更容易实现你想要的东西。@manish:我也有同样的想法(切换到TestNG-但我还没有找到适合我要求的好例子。也许我太笨了,不能使用google:-)如果您有关于使用TestNG对web服务进行功能测试的良好文档,请告诉我这些文档将非常感谢;-)我认为您最需要的是一种排序测试的方法,如果以前的测试失败,则可以跳过测试。排序只需将
    优先级
    添加到
    @Test
    @Test(priority=1)
    将在
    @Test(priority=2)
    之前运行。跳过是指将
    dependsOnMethods
    添加到
    @Test(priority=1)public void first(){}
    @Test(priority=2,dependsOnMethod=“first”)public void second(){}
    将确保仅当
    第一次
    成功时才会运行
    第二次
    。如果您仅使用
    dependsOnMethod
    ,则可以跳过使用
    优先级
    。可能重复的@Raedwald:IMHO不是重复的。初始问题非常不同,解决方案也会非常不同。您可以使用Te吗stNG?它允许对测试进行排序,使您更容易实现所需的目标。@manish:我也有同样的想法(切换到TestNG-但我还没有找到符合我要求的好例子。也许我太笨了,无法使用google:-)如果您有关于使用TestNG对web服务进行功能测试的良好文档,请告诉我这些文档将非常感谢;-)我认为您最需要的是一种排序测试的方法,如果以前的测试失败,则可以跳过测试。排序只需将
    优先级
    添加到
    @Test
    @Test(priority=1)
    将在
    @Test(priority=2)
    之前运行。跳过是指将
    dependsOnMethods
    添加到
    @Test(priority=1)public void first(){}
    @Test(priority=2,dependsOnMethod=“first”)public void second(){}
    将确保仅当
    第一次
    成功时才会运行
    第二次
    。如果您仅使用
    dependsOnMethod
    ,则可以跳过使用
    优先级
    。可能重复的@Raedwald:IMHO不是重复的。最初的问题非常不同,解决方案也会有所不同。