0

嗨,我是 JUnit 测试的新手。

我运行具有硒代码的 JUnit 程序,它不是从上到下运行,而是随机运行。

但是我想按顺序执行程序,如登录、创建、更新、删除等功能。

但是,它是这样运行

我想按顺序运行这个程序。把你的宝贵建议发给我。

4

4 回答 4

0

注释列表

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
}
于 2014-06-19T11:17:03.007 回答
0

您可以使用测试套件设置 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");
    }
}
于 2013-08-09T16:01:28.753 回答
0

您可以更改带有“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 将按照指定的顺序执行所有测试。

于 2015-08-28T20:41:03.313 回答
0

您也可以使用@FixMethodOrder (MethodSorters.JVM)

因为在这种情况下,它将按照实现方法的顺序执行。

于 2018-06-13T23:31:15.737 回答