繁体   English   中英

TestNg + Spring Integration如何抽象beforeMethod

[英]TestNg + Spring Integration how to abstract beforeMethod

在JUnit spring集成中,我们可以将所有测试类扩展为一个抽象类,以将@Before实现放在一个地方。

但是在TestNG中,由于我们必须将所有测试类都扩展到AbstractTestNGSpringContextTests我们将无法扩展到抽象类。 任何想法如何在Spring的TestNG中使用@AfterMethod@BeforeMethod一个抽象类?

请提供一个例子。

这是你想要的 ?

首先构建一个类,该类将容纳您的自定义@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/借来的

我实际上只是在做这个。 我选择使用侦听器来执行此操作。 为什么使用监听器而不是扩展? 因为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批注来为类指定侦听器。

我还想指出,这不是在实践中构造测试的好习惯,但是出于我的实验目的,以确保在调用新测试之前重置模拟,在这里很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM