您好我是JUnit测试的新手。
我使用selenium代码运行我的JUnit程序,它不会从上到下运行,它会随机运行。
但是我想按顺序执行程序,包括登录,创建,更新,删除等功能。
但是,它就像this
一样运行我想按顺序运行这个程序。请将您宝贵的建议发给我。
答案 0 :(得分: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");
}
}
答案 1 :(得分: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
}
答案 2 :(得分: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将按照指定的顺序执行所有的测试。
答案 3 :(得分:0)
您也可以使用 @FixMethodOrder(MethodSorters.JVM)。
在这种情况下,它将按照实现方法的顺序执行。