在给定的 JUnit 文件中运行测试之前是否可以运行外部命令?我使用 Eclipse 的 Run 命令运行测试。使用 JUnit 4。
谢谢。
非常模糊的问题。具体来说,您没有提到如何运行 JUnit 测试。您还提到了“文件”,一个文件可以包含多个 JUnit 测试。您想在每个测试之前或执行任何测试之前运行外部命令吗?
但更多主题:
如果您使用的是 JUnit 4 或更高版本,那么您可以使用
@Before
注释标记方法,并且该方法将在每个标记的 @Test
方法之前执行。或者,使用 @BeforeClass
标记静态 void 方法将导致该方法在类中的任何 @Test
方法运行之前运行。
public class MyTestClass {
@BeforeClass
public static void calledBeforeAnyTestIsRun() {
// Do something
}
@Before
public void calledBeforeEachTest() {
// Do something
}
@Test
public void testAccountCRUD() throws Exception {
}
}
如果您使用的 JUnit 版本早于 4,则可以重写
setUp()
和 setUpBeforeClass()
方法来替代 @Before
和 @BeforeClass
。
public class MyTestClass extends TestCase {
public static void setUpBeforeClass() {
// Do something
}
public void setUp() {
// Do something
}
public void testAccountCRUD() throws Exception {
}
}
假设您使用的是 JUnit 4.0,您可以执行以下操作:
@Test
public void shouldDoStuff(){
Process p = Runtime.getRuntime().exec("application agrument");
// Run the rest of the unit test...
}
如果您想为每个单元测试运行外部命令,那么您应该在
@Before
设置方法中执行此操作。
免责声明:我是 TestProcesses 的作者。
以防万一有人来到这里寻找解决方案:
问这个问题已经有一段时间了。假设您同时已迁移到 JUnit5 并正在使用(或可以使用)Spring Test,您可以查看TestProcesses。它是一个 JUnit5 扩展,用于管理测试期间所需的应用程序/程序(进程)的生命周期。
听起来这就是您正在寻找的东西,它允许您以声明方式管理流程的生命周期,而无需在测试类中使用大量样板。