- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试测试 API 调用是否安排在正确的调度程序上并在主线程上进行观察。
@RunWith(PowerMockRunner.class)
@PrepareForTest({Observable.class, AndroidSchedulers.class})
public class ProductsPresenterTest {
private ProductsPresenter presenter;
@Before
public void setUp() throws Exception{
presenter = spy(new ProductsPresenter(mock(SoajsRxRestService.class)));
}
@Test
public void testShouldScheduleApiCall(){
Observable productsObservable = mock(Observable.class);
CatalogSearchInput catalogSearchInput = mock(CatalogSearchInput.class);
when(presenter.soajs.getProducts(catalogSearchInput)).thenReturn(productsObservable);
/* error here*/
when(productsObservable.subscribeOn(Schedulers.io())).thenReturn(productsObservable);
when(productsObservable.observeOn(AndroidSchedulers.mainThread())).thenReturn(productsObservable);
presenter.loadProducts(catalogSearchInput);
//verify if all methods in the chain are called with correct arguments
verify(presenter.soajs).getProducts(catalogSearchInput);
verify(productsObservable).subscribeOn(Schedulers.io());
verify(productsObservable).observeOn(AndroidSchedulers.mainThread());
verify(productsObservable).subscribe(Matchers.<Subscriber<Result<Catalog<SoajsProductPreview>>>>any());
}
}
线
when(productsObservable.subscribeOn(Schedulers.io())).thenReturn(productsObservable);
抛出以下异常,我不明白为什么,因为 productObservable 是模拟的。有任何想法或类似经验吗?
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.
最佳答案
问题是由于 Observable::subscribeOn 是 final方法,Mockito can't mock .一种可能的解决方案是使用 Powermock:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Observable.class)
public class MockTest {
@Test
public void test() {
Observable productsObservable = PowerMockito.mock(Observable.class);
when(productsObservable.subscribeOn(null)).thenReturn(productsObservable);
productsObservable.subscribeOn(null);
verify(productsObservable).subscribeOn(null);
}
}
关于android - Mockito - MissingMethodInvocationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36868979/
我正在尝试测试 API 调用是否安排在正确的调度程序上并在主线程上进行观察。 @RunWith(PowerMockRunner.class) @PrepareForTest({Observable.c
我正在为我的程序编写测试,但我在这部分遇到异常。 @Test public void test(){ HttpSession session = new MockHttpSession();
在下面的代码中,我希望 given 将抛出 MissingMethodInvocationException,因为 foo() 是最终的。 但是我在 str.equals("String 1") 得到
我在运行 Junit 测试时遇到以下异常。 org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requi
我开始学习 Kotlin 和 Mockito,所以我编写了一个简单的模块来测试它。 AccountData_K.kt: open class AccountData_K { var isLogin:
因此,在对 kotlin 类进行大量试验和错误之后,我发现 java 中的相同代码是可测试的,但不能用 kotlin 测试。 @RunWith(MockitoJUnitRunner.class) pu
我有一个简单的 Controller 类 @RestController open class MyController() { @Autowired lateinit var myInterface
以下代码导致 org.mockito.exceptions.misusing.MissingMethodInvocationException: Level level = mock(Level.cl
Kotlin 可以自动为主要构造函数参数创建 getter(这很棒),并且默认情况下所有这些 getter 都是最终的(未打开)。我有一个类(在 Kotlin 中): open class SongC
我是一名优秀的程序员,十分优秀!