- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试测试我的一个名为 Store 的类,特别是一个名为removeFromFavourite 的方法下面是方法
public void removeFromFavourite(Quote quote) {
if(quote == null) {
throw new IllegalArgumentException("Quote can't be null");
}
if (quote.getId() <1) {
throw new IllegalArgumentException("Quote id can't be less than 1");
}
realm.beginTransaction();
QuoteRealMObject object = realm.where(QuoteRealMObject.class).
equalTo(QuoteRealMObject.ID, quote.getId()).findFirst();
if(object != null) {
deleteObject(object);
}
realm.commitTransaction();
}
private void deleteObject(RealmObject object) {
object.deleteFromRealm();
}
我创建了deleteObject方法来调用deleteFromRealm,因为deleteFromRealm是最终的,因此我无法模拟它。
我的期望是通过创建其 spy 来模拟调用“deleteObject”ob Store 的对象
这是我的@Before
方法
private Realm mockedRealm;
private Store store;
@Before
public void setUp() throws Exception {
mockedRealm = Mockito.mock(Realm.class);
store = new Store(mockedRealm);
store = PowerMockito.spy(store);
}
因此,我创建了 Realm 的模拟对象,并使用它来创建 Store 类的对象,然后从 store 的对象中创建了一个 spy ,并将其分配回 store 对象本身。
下面是removeFromFavourite的测试方法
@Test
public void removeFromFavourite() throws Exception {
Quote quot = new Quote();
quot.setId(1);
RealmQuery<QuoteRealMObject> query = Mockito.mock(RealmQuery.class);
RealmQuery<QuoteRealMObject> filteredQuery = Mockito.mock(RealmQuery.class);
Mockito.when(mockedRealm.where(QuoteRealMObject.class)).thenReturn(query);
Mockito.when(query.equalTo(QuoteRealMObject.ID, 1)).thenReturn(filteredQuery);
QuoteRealMObject mockedObject = Mockito.mock(QuoteRealMObject.class);
Mockito.when(filteredQuery.findFirst()).thenReturn(mockedObject);
PowerMockito.doNothing().when(store, "deleteObject", mockedObject);
store.removeFromFavourite(quot);
}
这里的行 PowerMockito.doNothing().when(store, "deleteObject", mockedObject);
本身正在调用真正的私有(private)方法“deleteObject”我收到了未完成的模拟异常
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at com.kgcorner.vachan.io.StoreTest.removeFromFavourite(StoreTest.java:132)
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, which is not supported
3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed
at org.mockito.internal.runners.DefaultInternalRunner$1$1.testFinished(DefaultInternalRunner.java:70)
at org.junit.runner.notification.SynchronizedRunListener.testFinished(SynchronizedRunListener.java:56)
at org.junit.runner.notification.RunNotifier$7.notifyListener(RunNotifier.java:190)
at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:72)
at org.junit.runner.notification.RunNotifier.fireTestFinished(RunNotifier.java:187)
at org.junit.internal.runners.model.EachTestNotifier.fireTestFinished(EachTestNotifier.java:38)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:331)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:79)
at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:85)
at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39)
at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
知道我哪里错了吗?
最佳答案
我认为 when
中的第三个参数应该是一个模拟匹配器:
PowerMockito.doNothing().when(store, "deleteObject", eq(mockedObject));
关于java - doNothing.When for private void 方法本身正在调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55913409/
我在其中一个实用程序类中有这行代码 System.setProperty("someProperty", ); 当上面的代码行通过测试执行时,我不希望发生任何事情。我已经用以下注释对该类进行了注释。
我正在使用 Mockito 以及 mockito-inline用于模拟静态方法。我正在尝试申请 doNothing或类似的行为,到静态 void 方法。以下解决方法有效,但我认为应该有一种更方便的方法
当另一个方法中的 spyAnotherService.getUrl(ID) 时,我试图进行 spy /模拟并返回一个虚拟 Url,该方法是 myService.deleteSomething(name
我知道我不应该测试这样的 void 方法,但我现在只是用一个简单的例子来测试 Mockito.doNothing() 。 我的服务类别: @Service public class Service{
我是 Mockito 的新手,我查看了这个示例,但是当它在方法的第一行调用 doNothing() 时,有一个步骤我不明白: @Test(expected = RuntimeException.cla
我用 Java 开发了一个应用程序,我正在尝试使用 Powermockito 创建单元测试(我应该补充一点,我是单元测试的新手)。 我有一个名为 Resource 的类,它有一个名为 readReso
我正在尝试测试我的一个名为 Store 的类,特别是一个名为removeFromFavourite 的方法下面是方法 public void removeFromFavourite(Quote
我试图模拟一个静态 void 方法,我尝试了 PowerMock 但总是遇到 NullPointer 异常。 我们正在尝试模拟以下调用 - public Class XYZ{ public voi
所以我有这个内部调用另一个服务的方法,为了我的测试目的,我不关心这个内部调用,我不希望这个内部服务做任何事情。 例如 public void testMyMethod() { List
我在运行单元测试时遇到以下错误: java.lang.RuntimeException: Method removeCallbacks in android.os.Handler not mocked
在 Mockito 中,如果你想让 void 方法什么也不做,你可以这样做: doNothing().when(_mockedClass).voidMethod(); 有没有办法用 JMockit 来
我有一个在其中调用 void 函数的方法,当我使用 doNothing() 时,它说不允许使用 void 方法。我如何在该特定行中doNothing()? 我正在使用这条线, when(spyColo
我正在尝试模拟 KeyStore 类。模拟之后,如果调用了加载方法,我不希望发生任何事情。因此我写了下面几行来实现这一点。 @PrepareForTest(KeyStoreFactor
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在测试类中 Autowiring 了一个字段 @Autowired private AbcDAO abcDAO; 并像这样使用它 doThrow(new RuntimeException()).wh
我有一个单元测试来测试将文件上传到 GCP 存储。这是上传文件的代码。 @Override public boolean upload(StorageConfiguration storageConf
以下代码导致 UnfinishedStubbingException PowerMockito.doNothing().when(widgetHelper).invokeAuditService(Ma
我想什么都不做29次,当发生30次调用时,然后抛出ArithmeticException。但我找不到任何可以设置 TIMES 属性的地方。这是我的想象: @Mock DAOclass dao; @Te
主类 public class BootSample { public int call(int m) { System.out.println("Entering into
我需要一个在测试期间调用时返回一些东西的方法,拥有该方法的类实例被实现为 spy 。 我知道 doNothing() 方法只适用于 void 方法。有没有办法通过返回某些东西的方法获得相同的行为? 谢
我是一名优秀的程序员,十分优秀!