需要一些帮助思考来自我的同伴StackOverflow名人的lambda.
选择列表列表以在图表中深入收集一些孩子的标准情况.什么样的方法可以Lambdas帮助这个样板?
public List<ContextInfo> list() {
final List<ContextInfo> list = new ArrayList<ContextInfo>();
final StandardServer server = getServer();
for (final Service service : server.findServices()) {
if (service.getContainer() instanceof Engine) {
final Engine engine = (Engine) service.getContainer();
for (final Container possibleHost : engine.findChildren()) {
if (possibleHost instanceof Host) {
final Host host = (Host) possibleHost;
for (final Container possibleContext : host.findChildren()) {
if (possibleContext instanceof Context) {
final Context context = (Context) possibleContext;
// copy to another object -- not …Run Code Online (Sandbox Code Playgroud) 我有这个调用 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)
我的问题是只有这一行被覆盖,其他行不会运行,这对我的总测试覆盖率有很大影响: …
我试图测试lambda表达式中的一些代码,这是从另一个类的回调.
class EmailSender {
private EmailBuilder emailBuilder;
public void send() {
String testEmail = emailBuilder.buildEmail("Test Email", bodyContentAppender());
//send testEmail
}
private Consumer<Email> bodyContentAppender() {
//how to test this through JUnit?
return email -> email.appendBody("Body Content");
}
}
interface EmailBuilder {
String buildEmail(String templateName, Consumer<Email> contentAppender);
}
Run Code Online (Sandbox Code Playgroud)
getBodyContent调用方法中的lambda表达式是EmailBuilderJUnit测试中的模拟依赖项EmailSender.由于我在嘲笑行为EmailBuilder,因此getBodyContent不会从测试中调用内部代码.如何测试这样的作品?
编辑:
通过Argument Captors捕获lambda表达式在这种情况下不是解决方案,因为模拟行为EmailBuilder并且不调用实际方法.其次,email.appendBody对一个由外部API传递而不是直接创建的对象进行一些转换.
java ×2
java-8 ×2
lambda ×2
unit-testing ×2
android ×1
java-stream ×1
junit ×1
kotlin ×1
retrofit2 ×1
rx-java2 ×1