我想针对http服务器进行集成测试。到目前为止,我只有junit用于单元测试的经验。
我有两个要求:框架必须有一个maven插件,并且测试用例代码必须是干净的 - 所以没有脏黑客和没有样板代码。
Plain JUnit适用于单元测试,@ Test方法是个性化的。但是对于集成测试,我必须处理几个必须交换某种状态(变量)的相关步骤。
我已经读过:
Can we use JUNIT for Automated Integration Testing?和Passing JUnit data between tests得出的结论是我不喜欢单元测试中的静态字段,我不想使用TestNG并在测试中添加依赖注释而我不这样做我想把我的测试放在一个长期不可读的测试方法中。
我更喜欢一些语法:
public class MyIntegrationTest() {
@Step
public void testCreate(Context context) {context.put("foo");}
@Step
public void testUpdate(Context context) {context.get();}
@Step
public void testDelete(Context context) {context.get()}
}
所以我希望以一种上下文实例作为参数执行@Step方法的方式来增强/使用?Unit。框架必须按顺序调用这些方法,不能单独调用。在一个完美的世界中,所有?单位guis会将@Step显示为@Test,但这是可选的......
任何提示如何做到这一点?
扬
答案 0 :(得分:1)
第一点是检查用于与Maven进行集成测试的Maven Failsafe Plugin。其次,您必须根据Maven FailSafe Plugin使用的约定命名集成测试,之后您应该能够使用maven(通过mvn clean verify)运行集成测试。 因此,这意味着您必须将集成测试命名为MyIntegrationIT.java ...要定义执行顺序,您必须使用与JUnit不同的框架,可能是支持此类需求的TestNG,但您已将其排除在外。所以问题是你想做什么样的测试?页面流等可能看起来JWebUnit可能看起来值得......
答案 1 :(得分:1)
您可能还想考虑http://httpunit.sourceforge.net/。它有助于检查响应是否从http服务器返回。
但是,它没有执行@Step功能。通常我会这样做:
@Test
public void MasterTest() {
step1(..);
step2(..);
....
}
public void step1(...){...}
public void step2(...){...}