我正在使用PowerMock测试中断异常情况下的错误处理。不幸的是,这些测试有时似乎对其他测试类有一些副作用:我在一个测试类中配置的模拟似乎在另一个测试类中仍然存在。为了产生副作用,我将下面的示例简化为基本行。
让我们假设我们有一个类要测试:
public class SomeClass {
private void someMethod(Future<Document> future) {
try {
future.get();
} catch (Exception e) {
Thread.currentThread().interrupt();
}
}
}
以及一个使用PowerMock测试私有方法的测试类:
@RunWith(PowerMockRunner.class)
public class DispatcherTest {
@Test
public void simpleTest() throws Exception {
Future<Object> futureMock = PowerMockito.mock(Future.class);
PowerMockito.when(futureMock.get()).thenThrow(new InterruptedException());
SomeClass dispatcher = PowerMockito.mock(SomeClass.class);
Whitebox.invokeMethod(dispatcher, "someMethod", futureMock);
}
}
当我现在创建另一个测试类(在第一个测试类之后执行)时,如下所示:
public class SimpleTest {
@Test
public void simpleTest() throws InterruptedException {
Thread.sleep(100);
}
}
我立即得到以下异常:
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at de.mocktest.SimpleTest.shouldSleep(SimpleTest.java:9)
如果我在第一节课中再次删除mock,一切都会按预期进行。
直到现在,我一直认为不同的测试类不应该相互影响。然而,在这个例子中,情况似乎是这样的。这是我不知道的PowerMock的一些特性吗?如果是的话,有什么方法可以防止这种情况发生吗?
无法执行线程。currentThread()。中断()可能会阻止JUnit/PowerMock执行某种“清理”?
我正在使用以下依赖项:
如果第一个测试是套件的一部分,那么第一个测试会影响第二个测试,因此您似乎是正确的。看看这个问题,如果在睡眠前调用中断,如果中断状态尚未清除,则会出现异常。在许多方法调用上,中断状态被清除(并引发中断异常)。
如果这些是单元测试,那么您需要模拟对线程的调用。currentThread()。中断()。实际上调用中断会破坏“单元测试”的“单元”部分
您正在设置导致睡眠中断的中断标志。这与模拟无关,因为这个简单的示例显示了相同的行为:
public class SimpleTest {
@Test
public void test1() {
Thread.currentThread().interrupt();
}
@Test
public void test2() throws InterruptedException {
Thread.sleep(100);
}
}
如果测试使用中断,您可能需要添加:
@Before
public void before() {
// clear the interrupted flag
Thread.interrupted();
}
到您的基本测试类。
我的处境:
实际上,它的测试如果eat方法对宠物有效,但我也需要检查feedPet方法对玩家也有效。 任何想法或建议都非常感谢。
我想现在,如果有可能模仿一个类一样 我们的业务逻辑在代码中的某个地方用< code>new myClass()创建了这个对象,因此我不能访问创建的对象来模拟这些方法。有没有办法替换整个类或者覆盖那些方法。我正在使用mockito,我只找到了这样做的例子 我们不能使用 PowerMock,因为它与我们的测试环境不兼容。 欢迎任何建议。
需要一些非常具体的包装器和例程。
除了个别的测试驱动和行为驱动框架之外,还有一些通用的框架和辅助函数类库,对任何的测试方法都很有用。 工具地址 Selenium 是一个浏览器自动化工具 integrated with PHPUnit Mockery 是一个可以跟 PHPUnit 或者 PHPSpec 整合的 Mock 对象框架 Prophecy 是个有自己的想法,且非常强大灵活的 PHP 对象 mocking 框架。它整合了 PH
问题内容: 我有一个仅在设置位标志时才运行的测试文件。我遵循了golang的测试文档中的一个简单示例: 如果我运行,它将按预期运行。但是,当我运行时,所有其他包测试均失败: 我希望能够运行所有测试,而不必担心在每个测试文件中解析此标志。有没有办法做到我所缺少的? 问题答案: 运行时,它会以相同的参数 将 每个程序包 作为单独的可执行文件 运行测试。因此,如果要向每个程序包传递一个标志,则每个程序包