当前位置: 首页 > 面试题库 >

jUnit中的多个RunWith语句

柴良哲
2023-03-14
问题内容

我写单元测试,并希望使用JUnitParamsRunnerMockitoJUnitRunner一个测试类。

不幸的是,以下操作无效:

@RunWith(MockitoJUnitRunner.class)
@RunWith(JUnitParamsRunner.class)
public class DatabaseModelTest {
  // some tests
}

有没有办法在一个测试类中同时使用Mockito和JUnitParams?


问题答案:

您不能执行此操作,因为根据规范,您不能将相同的注释两次放置在相同的注释元素上。

那么,解决方案是什么?解决的办法是只放一个@RunWith()你无法忍受的赛跑者,然后用其他东西代替。对于您的情况,我想您将删除MockitoJUnitRunner并以编程方式执行此操作。

实际上,它唯一要做的就是运行:

MockitoAnnotations.initMocks(test);

在测试用例的开始。因此,最简单的解决方案是将以下代码放入setUp()方法中:

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

我不确定,但是您 可能 应该避免使用flag多次调用此方法:

private boolean mockInitialized = false;
@Before
public void setUp() {
    if (!mockInitialized) {
        MockitoAnnotations.initMocks(this);
        mockInitialized = true;  
    }
}

但是,可以使用JUnt的规则实现更好的可重用解决方案。

public class MockitoRule extends TestWatcher {
    private boolean mockInitialized = false;

    @Override
    protected void starting(Description d) {
        if (!mockInitialized) {
            MockitoAnnotations.initMocks(this);
            mockInitialized = true;  
        }
    }
}

现在,只需将以下行添加到您的测试类中:

@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();

您可以与任何所需的运行程序一起运行此测试用例。



 类似资料:
  • 问题内容: 我有一张表格,其中包含有关零售店的信息。我有一个零售链名称的列表(WalMart,Target,Eaton等)。当用户选择一个时,我基本上会运行一个查询来查找与该链有关的任何内容。 例如,如果用户选择“ WalMart”,则查询将返回名称中带有单词“ WalMart”的任何内容(WalMart Scarborough,WalMart Supercenter Toronto,WalMar

  • 大家好,我有一个多个insert语句的问题,我需要插入许多记录。我用这种方式编写,但记录没有插入到“userbill”表中。帮帮我?? ..代码如下: logcat: 09-05 13:12:48.610:D/DalvikVM(7982):GC_FOR_ALLOC释放314K,10%释放5030K/5568K,暂停17ms,共18ms 09-05 13:12:48.610:I/dalvikvm-h

  • 问题内容: 我正在用php(mysql)生成报告, 例如: 这样我有12张桌子。 我可以在单个查询中做到吗。如果我做到了?过程变慢了吗? 问题答案:

  • 问题内容: 如果MySQL触发器中有多个if语句,那么最佳方法是什么? 目前,我的SQL如下所示: 乍看之下,这似乎行得通。但是,我注意到,当多个(else)if语句为true时,仅第一个语句被执行(例如,就像在PHP中一样)。 我如何只使用多个if,而不必是elseif,以便执行多于1条语句?用相同的动作创建多个触发器是不可能的,至少phpMyAdmin所示。将多个if置于一个触发器中会导致错误

  • 问题内容: 我想知道是否可以在case语句的then部分中指定多个值? 我已经在使用此代码的地方附加了一大段代码,以加入查询中的某些表中。我已在代码段中添加了评论。 问题答案: 这有点丑陋,但假设HeadQuarters不是十进制/数字类型,而只是整数值,

  • 我在Maven构建中使用JBehave,我也在Eclipse中开发它,有时在Eclipse中使用JUnit runner运行我的单元测试。我发现jbehave junit runner可以很好地美化jbehave中的故事。然而,添加jbehave junit runner似乎破坏了我的Maven构建。 安装后mvn清洁安装的结果https://github.com/codecentric/jbeh