嗨,我是 JUnit 测试的新手。
我运行具有硒代码的 JUnit 程序,它不是从上到下运行,而是随机运行。
但是我想按顺序执行程序,如登录、创建、更新、删除等功能。
但是,它是这样运行的
我想按顺序运行这个程序。把你的宝贵建议发给我。
嗨,我是 JUnit 测试的新手。
我运行具有硒代码的 JUnit 程序,它不是从上到下运行,而是随机运行。
但是我想按顺序执行程序,如登录、创建、更新、删除等功能。
但是,它是这样运行的
我想按顺序运行这个程序。把你的宝贵建议发给我。
注释列表
public interface AnnotationList{
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Order {
int value();
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyTest {
static class None extends Throwable {
private static final long serialVersionUID = 1L;
private None() {
}}
JUNITLink 类
public class JunitLink extends BlockJUnit4ClassRunner {
public JunitLink(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
protected List<FrameworkMethod> computeTestMethods() {
List<FrameworkMethod> classMethods = getTestClass().getAnnotatedMethods(AnnotationList.MyTest.class);
SortedMap<Integer, FrameworkMethod> sortedTestMethodList = new TreeMap<Integer, FrameworkMethod>();
for (FrameworkMethod seleniumTest : classMethods) {
if (seleniumTest.getAnnotation(AnnotationList.Order.class) != null) {
sortedTestMethodList.put(seleniumTest.getAnnotation(AnnotationList.Order.class).value(),seleniumTest);
}
}
return new ArrayList<FrameworkMethod>(sortedTestMethodList.values());
}
@Override
protected void runChild(FrameworkMethod method, RunNotifier notifier) {
EachTestNotifier eachNotifier = makeNotifier(method, notifier);
if (method.getAnnotation(Ignore.class) != null) {
runIgnored(eachNotifier);
} else {
runNotIgnored(method, eachNotifier);
}
}
private int runNotIgnored(FrameworkMethod method,EachTestNotifier eachNotifier) {
int failures = 0;
eachNotifier.fireTestStarted();
try {
methodBlock(method).evaluate();
}
catch (AssumptionViolatedException e) {
eachNotifier.addFailedAssumption(e);
failures++;
}
catch (Throwable e) {
eachNotifier.addFailure(e);
failures++;
} finally {
eachNotifier.fireTestFinished();
}
return failures;
}
private void runIgnored(EachTestNotifier eachNotifier) {
eachNotifier.fireTestIgnored();
}
private EachTestNotifier makeNotifier(FrameworkMethod method,RunNotifier notifier) {
Description description = describeChild(method);
return new EachTestNotifier(notifier, description);
}
}
启动测试
@RunWith(JunitLink.class)
public class StartUp extends SeleneseTestBase {
public static WebDriver driver;
@Override
@Before
public void setUp()
{
}
@Override
@After
public void tearDown() {
}
TestCases 这应该扩展上面创建的 StartUp 类
public class Testcase extends StartUp{
public SmokeTest() throws Exception {
}
@Test
@Order(1)
// Wrire test method
}
@Test
@Order(2)
// Test Case 2
}
@Test
@Order(3)
//Test case 3
}
您可以使用测试套件设置 JUnit 的类顺序:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit1.class,
TestJunit2.class
})
public class JunitTestSuite {
}
并使用 @FixMethodOrder设置类中的测试顺序(自 JUnit 4.11 起)
import org.junit.runners.MethodSorters;
import org.junit.FixMethodOrder;
import org.junit.Test;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {
@Test
public void firstTest() {
System.out.println("first");
}
@Test
public void secondTest() {
System.out.println("second");
}
}
您可以更改带有“Test”的 TestName。例如 :
@Test
public void loginTest(){
// Wrire test method
}
@Test
public void creationTest(){
// Test Case 2
}
@Test
public vid updateTest(){
//Test case 3
}
如果你有 loginTest()、creationTest() 和 updateTest() 而不是 login()、create() 和 update(),那么 Junit 将按照指定的顺序执行所有测试。
您也可以使用@FixMethodOrder (MethodSorters.JVM)。
因为在这种情况下,它将按照实现方法的顺序执行。