相关疑难解决方法(0)

在单元测试中检查工厂的结果

我开发了一些具有类似行为的类,它们都实现了相同的接口.我实现了一个工厂,它创建适当的对象并返回接口.我正在为工厂写一个单元测试.你得到的只是对象的接口.测试工厂工作正常的最佳方法是什么?

我想知道Java中的答案,但如果有一个跨越语言的解决方案,我想知道它.

答案中的第2号将像其他答案一样完成吗?如果是这样,我将标记另一个接受的答案并重新提出我的问题,以解决返回界面的工厂以及您不知道哪种类型的具体类实现了界面,以及您知道具体类是什么的情况用过的.

java tdd unit-testing

16
推荐指数
2
解决办法
2万
查看次数

使用Java 8 Lambdas的单元测试代码

我已经使用Java 8几个月了,我已经开始使用Lambda表达式,这在某些情况下非常方便.但是,我常常遇到一些问题,要对使用Lambda的代码进行单元测试.

以下面的伪代码为例:

private Bar bar;

public void method(int foo){
    bar.useLambda(baz -> baz.setFoo(foo));
}
Run Code Online (Sandbox Code Playgroud)

一种方法是仅仅验证条形码上的呼叫

verify(bar).useLambda(Matchers.<Consumer<Baz>>.any());
Run Code Online (Sandbox Code Playgroud)

但是,通过这样做,我不测试Lambda的代码.

另请注意,我无法使用方法替换Lambda并使用方法引用:

bar.useLambda(This::setFooOnBaz);
Run Code Online (Sandbox Code Playgroud)

因为我不会在那个方法上有foo.或者至少这是我的想法.

你以前遇到过这个问题吗?如何测试或重构我的代码以正确测试?


编辑

因为我编码的是单元测试,我不想实例化bar,而我将使用mock.所以我将无法验证baz.setFoo通话.

java lambda unit-testing java-8

14
推荐指数
2
解决办法
1万
查看次数

RxJava 和 Retrofit 的单元测试

我有这个调用 Rest API 并将结果作为 Observable (Single) 返回的方法:

fun resetPassword(email: String): Single<ResetPassword> {
    return Single.create { emitter ->

        val subscription = mApiInterfacePanda.resetPassword(email)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe({ resetPasswordResponse ->
                when(resetPasswordResponse.code()) {
                    200 ->  {
                        resetPasswordResponse?.body()?.let { resetPassword ->
                            emitter.onSuccess(resetPassword)
                        }
                    }
                    else -> emitter.onError(Exception("Server Error"))
                }
            }, { throwable ->
                    emitter.onError(throwable)
            })

        mCompositeDisposable.add(subscription)

    }
}
Run Code Online (Sandbox Code Playgroud)

单元测试:

@Test
fun resetPassword_200() {
    val response = Response.success(200, sMockResetPasswordResponse)
    Mockito.`when`(mApiInterfacePanda.resetPassword(Mockito.anyString()))
        .thenReturn(Single.just(response))

    mTokenRepository.resetPassword(MOCK_EMAIL)

    val observer = mApiInterfacePanda.resetPassword(MOCK_EMAIL)
    val testObserver = TestObserver.create<Response<ResetPassword>>()
    observer.subscribe(testObserver)

    testObserver.assertSubscribed()
    testObserver.awaitCount(1)
    testObserver.assertComplete()
    testObserver.assertResult(response)
}
Run Code Online (Sandbox Code Playgroud)

我的问题是只有这一行被覆盖,其他行不会运行,这对我的总测试覆盖率有很大影响: …

android unit-testing kotlin retrofit2 rx-java2

7
推荐指数
1
解决办法
298
查看次数

标签 统计

unit-testing ×3

java ×2

android ×1

java-8 ×1

kotlin ×1

lambda ×1

retrofit2 ×1

rx-java2 ×1

tdd ×1