Tag: jmockit

Jmockit:不能模拟net.android.Uri类的toString方法

IDE:Android Studio 2.2.2 | Jmockit:2.1 | Java:1.8.0_102-b14 我试图模拟类net.android.Uri的方法toString()。 这个类上的所有方法都可以模拟OK,但是toString()方法。 @Test public void method(@Mocked final Uri uri) throws Exception { new NonStrictExpectations() { { uri.getHost(); result = “sendViewLog”; uri.getAuthority(); result = “getAuthority”; uri.getEncodedFragment(); result = “getEncodedFragment”; uri.getPort(); result = 8080; uri.toString(); // <——- result = "helloWorld"; } }; sut.method(); } 结果:但是toString()返回null值,上面的所有方法都被模拟了。 你能给我一些解决方法来解决这个问题。 PS1:我意识到当我将鼠标hover在Expectations块内的toString方法时。 它显示此警告消息: 报告对忽略该调用结果的特定方法的任何调用。 检查使用org.jetbrains.annotations.Contract(pure […]

Jmockit没有合并使用coverage-output = serial生成的两个coverage.ser文件

我有一个maven项目我使用参数-Dcoverage-output=serial运行junit。 每次运行后,我在相同父文件夹下的diffeerent文件夹中备份每个coverage.ser文件,然后运行ant任务生成覆盖率报告。 喜欢这个 JMockit正在生成覆盖率报告和index.html,但没有合并两个报告。 它似乎只使用第一个生成报告(哪个文件夹是ant构建文件中的参数中的第一个) coverage.ser 。

在JMockit中模拟测试类的私有方法

在我的测试类(CUT) – 一个ejb – 我有一个私有方法“getConnection”。 我想测试CUT的另一种方法,但这种方法会先失败。 我尝试过如下所示,但“调用”是错误的。 我不想调用该方法,我想将其存根。 但是怎么样? (’连接’是存根) new NonStrictExpectations() { { invoke(archivingBean, “getConnection”);result = connection; } }; archivingBean.moveCreditBasic2Archive(new Date());

validation在子类上调用此方法时是否调用了重写的超类方法

我将使用此示例显示我的问题: 我有一个方法foo的类。 该类有一个子类,它会覆盖此方法。 子类’方法调用超类’方法。 我可以validation吗? 我不想测试超类中的foo 。 我只需要validation它是否被调用。 我知道重构可能会有所帮助( 有利于组合而非inheritance等 ),但我无法做到这一点。 有没有办法实现我的需要? 以下是我尝试过的简单示例 package tmp; import org.junit.Test; import org.mockito.Mockito; import static org.mockito.Mockito.times; public class Example { @Test public void test() { // given ChildClass childClass = new ChildClass(); ChildClass spyChildClass = Mockito.spy(childClass); // when spyChildClass.foo(100); // then Mockito.verify((BaseClass) spyChildClass, times(1)).foo(101); } } abstract class BaseClass […]

找不到兼容的方法:将对象传递给方法时出错?

我正在尝试为我们拥有的一些旧遗留代码编写junit 下面是我正在编写junit的DataLogger类中的方法,我正在使用jmockit – private Object[] extractMessageObjects(final Object… objects) { Object[] result = new Object[objects.length – 1]; System.arraycopy(objects, 0, result, 0, result.length); return result; } 所以下面的测试应该可行。 对? @Test public void testLogDebugWithStackTrace() { DataLogger logger = DataLogger.getInstance(ClientTest.class); Object obj[] = new Object[] {1}; Deencapsulation.invoke(logger, “extractMessageObjects”, obj); } 但我得到例外 – No compatible method found: extractMessageObjects(java.lang.Integer) 我在这里做错了吗?

如果我的测试中有validation,期望是多余的吗?

我对期望和validation的目的和差异感到困惑。 例如 @Tested FooServiceImpl fooService; @Injectable FooDao fooDao; @Test public void callsFooDaoDelete() throws Exception { new Expectations() {{ fooDao.delete(withEqual(1L)); times = 1; }}; fooService.delete(1L); new Verifications() {{ Long id; fooDao.delete(id = withCapture()); times = 1; Assert.assertEquals(1L, id); }}; } 首先,如果这个测试编写得不好,请告诉我。 第二,我的问题:期望部分对我来说似乎是多余的,我无法想出一个不会出现的例子。

如何在arquillian服务部署中添加库?

我目前正在使用Arquillian用于jboss(远程),我正在尝试让Jmockit工作。 我部署了一个工作正常的耳朵,但我收到arquillian服务的错误: java.lang.NoClassDefFoundError: mockit/internal/state/TestRun Caused by: java.lang.ClassNotFoundException: mockit.internal.state.TestRun from [Module “deployment.arquillian-service:main” from Service Module Loader] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) 我正在使用jMockit 1.7并在EAR部署中使用它。 如何在此部署中添加库(arquillian-service) PS:这个部署由arquillian管理,我与它无关。

如何模拟JdbcTemplate.queryForObject()方法

我的方法看起来像这样: public class Decompile extends JdbcDaoSupport public void getRunner(){ String val = this.getJdbcTemplate().queryForObject(sql,String.class, new Object[]{1001}); } } 请建议我如何嘲笑这个。

使用JMockit模拟测试类的私有方法

我想模拟一个被测试类的私有方法但是方法在调用方法之后首先返回false两次,它应该返回false。 这是我试过的代码。 这是正在测试的类 public class ClassToTest { public void methodToTest() { Integer integerInstance = new Integer(0); boolean returnValue= methodToMock(integerInstance); if(returnValue) { System.out.println(“methodToMock returned true”); } else { System.out.println(“methodToMock returned true”); } System.out.println(); } private boolean methodToMock(int value) { return true; } } 考试class import org.junit.Test; import static mockit.Deencapsulation.*; import mockit.*; public class TestAClass { @Tested […]

如何在unit testing时使用jmockit将空字符串传递给私有方法?

下面是我的DataTap类中的私有方法,我试图使用jmockit对这个私有方法进行junit测试 – private void parseResponse(String response) throws Exception { if (response != null) { // some code } } 所以下面是我写的junit测试但是对于null情况,它会在junit测试本身上以某种方式抛出NPE。 DataTap tap = new DataTap(); Deencapsulation.invoke(tap, “parseResponse”, “hello”); // this line throws NPE Deencapsulation.invoke(tap, “parseResponse”, null); 所以我的问题是 – 有没有什么方法可以使用JMOCKIT作为junit测试的一部分将null string传递给parseResponse方法? 这就是我在这条线上看到的 – 类型为null的参数应显式转换为Object [],以便从Deencapsulation类型调用varargs方法invoke(Object,String,Object …)。 也可以将其转换为Object以进行varargs调用