gpt4 book ai didi

java - 在 Junit 4 中构建测试套件

转载 作者:行者123 更新时间:2023-11-30 04:12:29 24 4
gpt4 key购买 nike

现在,我有这个简单的测试套件:

@RunWith(Suite.class)
@Suite.SuiteClasses({
CommentingTest.class,
SubscriptionsTest.class,
EditingTest.class,
BasicOperationsTest.class
})
public class WebTestSuite { }

但是现在我想将参数传递给这些测试类,告诉他们是否使用管理员帐户进行测试,是否在 View 模式A或B下进行测试等。我希望我可以做类似的事情这个:

@RunWith(Suite.class)
public class WebTestSuite {
public WebTestSuite() {
this.addTest(new CommentingTest(Accounts.ADMIN, ViewMode.A));
this.addTest(new CommentingTest(Accounts.ADMIN, ViewMode.B));
this.addTest(new CommentingTest(Accounts.GUEST, ViewMode.B));
this.addTest(new SubscriptionsTest(Accounts.ADMIN, ViewMode.A));
this.addTest(new SubscriptionsTest(Accounts.ADMIN, ViewMode.B));
this.addTest(new SubscriptionsTest(Accounts.GUEST, ViewMode.B));
this.addTest(new EditingTest(Accounts.ADMIN, ViewMode.A));
this.addTest(new EditingTest(Accounts.ADMIN, ViewMode.B));
this.addTest(new EditingTest(Accounts.GUEST, ViewMode.B));
this.addTest(new BasicOperationsTest(Accounts.ADMIN, ViewMode.A));
this.addTest(new BasicOperationsTest(Accounts.ADMIN, ViewMode.B));
this.addTest(new BasicOperationsTest(Accounts.GUEST, ViewMode.B));
}
}

但我不知道如何做这样的事情。有任何想法吗?谢谢!

最佳答案

您不能按照列出的方式执行此操作,因为测试类需要有一个无参数构造函数。

根据测试的情况,您可以执行 2 个选项:

选项 1. 使用具有参数的子类创建抽象测试类:

使用所有测试创建抽象测试类,然后让子类提供变量信息。抽象类可以在构造函数中接受参数,子类无参数构造函数使用适当的参数调用 super(...)

public abstract class AbstractCommentingTest{

private Account account;
private ViewMode mode;

public AbstractCommentingTest(Account a, ViewMode v){
this.account=a;
this.viewMode = v;
}


//Put your tests here using the given account and view
@Test
public void foo(){

}

@Test
public void bar(){

}


}

然后是你的具体类

public class AdminViewACommentingTest extends AbstractCommentingTest{
//no-arg constructor for JUnit
public AdminViewACommentingTest(){
super(Accounts.ADMIN, Viewmode.A);
}
}

这可行,但如果有很多选项,可能会很快失控

选项 2:使用 Junit 参数化测试来获得每个选项组合:

我假设 Accounts 和 ViewMode 是枚举?如果是这样,您可以轻松地使用 values() 方法创建所有可能的组合作为参数化测试集的一部分。

@RunWith(Parameterized.class)
public class CommentingTest{

@Parameters
public static Collection<Object[]> createData(){
List<Object[]> data = new ArrayList<Object[]>();

for(Accounts account : Accounts.values()){
for(ViewMode view : ViewMode.values()){
data.put(new Object[]{account, view});
}
}
return data;
}


private Account account;
private ViewMode mode;

public CommentingTest(Account a, ViewMode v){
this.account=a;
this.viewMode = v;
}

//Put your tests here using the given account and view
@Test
public void foo(){

}

@Test
public void bar(){

}

}

关于java - 在 Junit 4 中构建测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19280680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com