Tag: mockito

当运行测试android嘲笑时,在视图中的空指针

我创建测试: class MenuPresenterTest { lateinit var presenter: MenuPresenter lateinit var view: MenuView @Before fun setUp() { view = mock(MenuView::class.java) presenter = MenuPresenter() } @Test fun test_validation() { presenter.openActivity() verify(view).openActivity() } } MenuView interface MenuView : MvpView { fun init() fun openActivity() } MenuPresenter @PerActivity class MenuPresenter @Inject constructor() : MvpPresenter<MenuView>() { fun initView(){ view.init() } […]

模拟属性设置器

我想在我的测试中嘲弄一个属性设置者,但我怎么也找不到任何东西。 这是我迄今为止所尝试的: interface Foo { var property: Int } @RunWith(MockitoJUnitRunner::class) class TestClass { @Mock private val fooMock: Foo = mock() private var temp = 0 @Before fun setup() { whenever(fooMock.property).then { invocation -> if (invocation.arguments.isEmpty()) { // this part works fine return@then 15 } else { // this never gets called temp = invocation.getArgument(0) null […]

模拟方法出错

我试图嘲笑项目中的一些方法,以便在被调用时返回一定的值。 但是当你运行测试时,它们会随输出而下降: org.mockito.exceptions.misusing.InvalidUseOfMatchersException:使用参数匹配器无效! 0 matchers expected,1 recorded: – > at com.hodzi.stackviewer.questions.detail.QuestionDetailPresenterTest.voteTest(QuestionDetailPresenterTest.kt:69) 如果匹配器与原始值结合,则可能发生此异常://不正确:someMethod(anyObject(),“raw String”); 在使用匹配器时,所有参数都必须由匹配器提供。 例如:// correct:someMethod(anyObject(),eq(“String by matcher”)); 如果在调试模式下运行相同的代码并遍历所有行,那么当调用shared.getToken()时,将返回指定的值。 但是正常的启动,测试落在这条线上。 码: import com.hodzi.stackviewer.questions.QuestionsInteractor import com.hodzi.stackviewer.utils.Shared import com.hodzi.stackviewer.utils.Vote import org.junit.BeforeClass import org.junit.Test import org.mockito.ArgumentMatchers import org.mockito.Mockito internal class QuestionDetailPresenterTest { companion object { lateinit var presenter: QuestionDetailPresenter lateinit var view: QuestionDetailView @BeforeClass @JvmStatic fun setUp() { […]

如何在模拟类中调用特定的lambda?

我有下一个案例的参数: @Test fun lostClick() { //setup parameters val func0 : (Unit) -> Unit = { println("fun0")} val func1 : (String) -> Unit = { println("fun1")} val func2 : (Int) -> Unit = { println("fun2")} whenever(deviceInteractor.reserveBadCaseDevice( //equals `when` eq(workerId), eq(DeviceCondition.LOST), eq(func0), eq(func1), eq(func2))).then({ func0.invoke(Unit) }) presenter.lostClick() //view reaction verify(viewState).showLoad(true) // verify(viewState).setButtonGiveEnabled(true) // if func0 called this […]

我如何测试AsyncTask没有被调用?

我正在写一些针对Activity的测试。 在我的Activity的onCreate()方法中,我有一个异步调用。 我想写一个测试来验证AsyncTask没有被调用。 我该怎么做? 我试图嘲笑AsyncTask,但我不能因为execute()是最后的方法。 我最初的想法是做这样的事情: val mockedTask = mock(QuoteOfTheDayTask::class.java) verify(mockedTask, never()).execute() 但是现在,遇到一些试图以这种方式进行测试的问题,我开始想,也许我正在以这种错误的方式去做。 这几乎觉得我不应该试图对这个活动进行测试,但是现在这就是调用的地方。

Android系统。 Mockito使用真实的对象而不是模拟

所以,我只是写简单的测试。 问题是测试运行器运行真正的“仓库”类代码,而不是模拟代码…你有什么想法,为什么我可以得到这个例外? 测试课 class SingInFacebookPresenterTest { @Mock private lateinit var view: SignInFacebookContract.View @Mock private lateinit var repository: Repository @Captor private lateinit var callback: ArgumentCaptor<RepositoryCallback.FacebookLoginImp> private lateinit var presenter: SingInFacebookPresenter private val serverToken = "token" @Before fun init() { MockitoAnnotations.initMocks(this) presenter = SingInFacebookPresenter(MockContext(), repository, view) } @Test fun facebook_login_success() { //Given val token = "token" val […]

Kotlin中@BeforeAll的正确解决方法是什么?

目前JUNIT5 API只允许@BeforeAll在静态的方法上 所以如果这样做,这将不会编译: @BeforeAll fun setup() { MockitoAnnotations.initMocks(this) mvc = MockMvcBuilders.standaloneSetup(controller).build() } 所以为了在Kotlin中有静态的方法,我必须把这样的伴侣对象放进去: companion object { @JvmStatic @BeforeAll fun setup() { MockitoAnnotations.initMocks(this) mvc = MockMvcBuilders.standaloneSetup(smsController).build() } } 这将编译,但我没有访问父类的变量。 那么用Kotlin调用JUnit5的@BeforeAll会是怎样的习惯用法呢?

RxJava在Android中进行故障测试Presenter

嗨,我想测试一个Android主持人使用mockito,我有很多麻烦。 这是我想测试的代码: public class SignUpPresenter extends BasePresenter { private static final String TAG = SignUpPresenter.class.getSimpleName(); private final AuthRepository mAuthRepository; private final SignUpView mView; public SignUpPresenter(@NonNull SignUpView view, @NonNull AuthRepository authRepository) { this.mAuthRepository = authRepository; this.mView = view; } public void signUp(@NonNull String username, @NonNull String password, @NonNull String email) { mCompositeDisposable.add(mAuthRepository.signUp(username, password, email) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) […]

NoSuchMethodError:beforeCheckcastToFunctionOfArity没有静态方法

我有使用JUnit4 , Mockito和Espresso用Java编写的Android应用程序的测试。 我试图将它们转换为Kotlin ,但是我的测试失败,例外: java.lang.NoSuchMethodError: No static method beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object; in class Lkotlin/jvm/internal/TypeIntrinsics; or its super classes (declaration of 'kotlin.jvm.internal.TypeIntrinsics' appears in /data/app/com.takhfifan.takhfifan-2/base.apk) at com.takhfifan.takhfifan.activity.AddressSelectActivityTest$configApiToReturnAddresses$1.answer(AddressSelectActivityTest.kt:131) 这个栈跟踪所在的行是这个代码的第二行(铸造): doAnswer { invocation -> val resultListener = invocation.arguments[1] as (List<Address>)->Unit runLater(after) { resultListener(Arrays.asList<Address>(*addresses)) } null }.`when`<Api>(api).listCustomerAddresses(any(), any(), any()) 而我上面嘲笑的功能的声明是这样的: open fun listCustomerAddresses(sessionId: String,resultListener: (List<Address>)->Unit, errorListener: (Throwable)->Unit) {… 我试图添加到我的proguard文件,但没有任何改变: -keep […]

嘲笑Kotlin和Mockito的通用接口

我正在尝试使用Mockito模拟Kotlin中的通用接口。 但到目前为止,我没有找到自然的解决办法。 鉴于: interface X<T> { fun x(): T } fun f(x: X<Int>) = xx() 我可以用下面的任何一个来模拟X : val x = f(Mockito.mock(X::class.java) as X<Int>) 但是这会产生一个“不受控制的投射”的警告。 @Mock lateinit var x: X<Int> 但我不想使用@Mock注释,因为我喜欢让我的字段最终。 引入一个辅助函数,就像mockito-kotlin库所做的那样: inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java)!! 然后像这样调用它: val x: X<Int> = mock() 但我不想使用帮助函数。 有没有一个优雅的纯Kotlin方式来模拟与Mockito的通用接口? (我宁愿没有警告的一个版本。)