JMockit和参数化测试(JUnit参数化或JUnitParams)

JMockit和参数化测试(JUnit参数化或JUnitParams),junit,jmockit,junitparams,Junit,Jmockit,Junitparams,我想知道JMockit是否与JUnit参数化测试或JUnitParameterized测试兼容,因为到目前为止我还没有找到一种方法让它们一起工作,因为您只能指定一个JUnit运行程序,而且JMockit、JUnitParameters和参数化测试都要求您使用它们自己的运行程序 JMockit不要求您使用自己的跑步者。使用自己的运行程序只是确保JMockit在测试运行之前正确初始化的可能方法之一。您还可以通过命令行参数将JMockit添加为Java代理,取决于类路径顺序(JUnit之前的类路径中有

我想知道JMockit是否与JUnit参数化测试或JUnitParameterized测试兼容,因为到目前为止我还没有找到一种方法让它们一起工作,因为您只能指定一个JUnit运行程序,而且JMockit、JUnitParameters和参数化测试都要求您使用它们自己的运行程序

JMockit不要求您使用自己的跑步者。使用自己的运行程序只是确保JMockit在测试运行之前正确初始化的可能方法之一。您还可以通过命令行参数将JMockit添加为Java代理,取决于类路径顺序(JUnit之前的类路径中有JMockit),或者在实际测试开始之前手动调用JMockit初始化方法,如果您有这样一个地方可以调用它,例如。G如果您使用自己的JUnit运行程序。

mockit.internal.startup.startup.initializeIfPossible()谢谢!这就是我用的。然而,在我的问题中,有人提出了内部阶级的方式。无法让它工作…我不确定你所说的“内部类方式”是什么意思,但在
之前使用
@可能太晚了。JMockit注册一个代理来动态转换加载的类,这样您就可以模拟任何东西,甚至是私有方法、静态内容或构造函数,而在使用代理方法的模拟框架中,您通常无法模拟这些东西。但要使其正常工作,JMockit必须及时初始化。可能是
@Before
太晚了,无法初始化它。您可以编写自己的JUnit运行程序,首先使用上述方法初始化JMockit,然后转发给原始的参数化运行程序,或者您也可以使用我在回答中提到的Java代理方式。另外,您可以考虑不同的测试框架,因为JUnit 4的参数化测试无论如何都是PITA。我不确定JUnit5在这方面有多好。我现在通常使用Spock来编写测试,这是令人惊讶的,特别是当涉及到数据驱动测试/参数化测试时,它与JUnit4完全兼容(下一个版本将与JUnit5兼容)。每个支持JUnit4的工具都支持Spock,您甚至可以在一个项目中混合使用JUnit4和Spock测试,例如。G对于缓慢的迁移或持久性迁移,JUnit 5当然更好,但我使用Java 6,我仍然不知道它是否兼容(似乎不兼容)。我会给斯波克看一看,非常感谢(你使用的是Groovy还是Java?)