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不是重复的。最初的问题非常不同,解决方案也会有所不同。