在JUnit spring集成中,我们可以将所有测试类扩展到抽象类,以便在一个地方实现@Before
。
但是在TestNG中我们必须将所有测试类扩展到AbstractTestNGSpringContextTests
,否则我们将无法扩展到抽象类。知道如何在SpringN的TestNG中使用@BeforeMethod
,@AfterMethod
创建一个抽象类吗?
请提供一个例子。
答案 0 :(得分:1)
这是你在找什么?
首先构建一个类,它将容纳您的自定义@BeforeMethod和@AfterMethod注释方法,如下所示:
public class LocalSpringBase extends AbstractTestNGSpringContextTests {
@BeforeMethod
public void beforeMethod() {
System.err.println("Another beforeMethod");
}
@AfterMethod
public void afterMethod() {
System.err.println("Another afterMethod");
}
}
然后您的实际测试类扩展了LocalSpringBase,如下所示:
@ContextConfiguration (locations = {"classpath:spring-test-config.xml"})
public class TestSpring extends LocalSpringBase {
@Autowired
EmailGenerator emailGenerator;
@Test ()
void testEmailGenerator() {
String email = emailGenerator.generate();
System.out.println(email);
Assert.assertNotNull(email);
Assert.assertEquals(email, "feedback@yoursite.com");
}
}
为了完整起见,还包括其他类 界面
public interface EmailGenerator {
String generate();
}
具体实施
@Service
public class RandomEmailGenerator implements EmailGenerator {
@Override
public String generate() {
return "feedback@yoursite.com";
}
}
这些例子来自www.mkyong.com/
答案 1 :(得分:0)
我实际上只是在做这个。我选择使用侦听器来执行此操作。为什么使用监听器而不是扩展?因为Java仅提供单个类的继承,并且我不希望对我的框架进行限制。
在我的示例中,我正在尝试对initMocks调用进行抽象,以初始化模拟,然后执行Mockito测试的每个测试方法。
这是我的听众:
public class MockDemoListener implements ITestListener {
public void onTestStart(ITestResult result) {
MockitoAnnotations.initMocks(result.getInstance());
}
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestFailure(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestSkipped(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub
}
public void onStart(ITestContext context) {
// TODO Auto-generated method stub
}
public void onFinish(ITestContext context) {
// TODO Auto-generated method stub
}
}
这是我的测试班:
public class MockTest1 {
@Mock
private DemoObj mockObj1;
private DemoObj prevObj;
@Test
public void testMockIsInitialized() {
Assert.assertNotNull(mockObj1);
prevObj = mockObj1;
}
@Test
public void testMockIsReInitialized() {
Assert.assertNotNull(mockObj1);
Assert.assertNotEquals(mockObj1, prevObj);
}
}
这是我的Mockito xml套件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="suite1">
<listeners>
<listener class-name="com.demo.listener.MockDemoListener" />
</listeners>
<test name="mockTests">
<classes>
<class name="com.demo.test.MockTest1"/>
<class name="com.demo.test.MockTest1"/>
</classes>
</test>
</suite>
我只想指出,您还可以通过在类顶部添加@Listeners批注来指定类的侦听器。
我还想指出,这不是在实践中构造测试的好习惯,但是出于我的实验目的,以确保在调用新测试之前重设模拟,这很好。