Wil*_*ang 19 junit android unit-testing
我正在尝试在运行Android本地单元测试时打印一些东西,但没有发生任何事情.怎么了?我该如何解决?
我在http://developer.android.com上查阅了一些文档,发现Android Local Unit Test只在我的机器的JVM上运行,用于运行单元测试的android.jar文件不包含任何实际代码,所以Log. d()什么都不打印.如果我想打印日志,我该怎么办?
这是我的代码,FeedbackModelTest.java位于src/test/main目录中.
package com.upward.reader.mvp.model;
import android.util.Log;
import com.upward.reader.mvp.bean.FeedbackBean;
import com.upward.reader.net.RequestJSONCallback;
import org.junit.Test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class FeedbackModelTest {
@Test
public void postFeedback() throws Exception {
final String url = "http://test.guguread.com/interface/app/user/feedback?";
Map<String, String> params = new HashMap<>();
params.put("content", "content");
new FeedbackModel().postFeedback(url, params, new RequestJSONCallback<FeedbackBean>() {
@Override
public void onResponse(FeedbackBean result) throws IOException {
Log.d("TAG", result.toString());
}
@Override
public void onFailure(Exception e) {
e.printStackTrace();
}
});
}
Run Code Online (Sandbox Code Playgroud)
}
Jef*_* T. 40
你应该使用标准输出,System.out.println("Hello StackOverflow")
intead Log.x()
.然后,您可以在运行选项卡中查看日志信息.
2017/12/16更新:如果您无法在Run
选项卡上看到输出,请转到 Android Monitor
选项卡以查找输出.
我建议你使用接口:
interface PlatformLog {
fun e(tag: String, msg: String, throwable: Throwable?=null)
fun i(tag: String, msg: String)
}
Run Code Online (Sandbox Code Playgroud)
创建一个接口例如:
在单元测试中:
class SystemPlatformLog : PlatformLog {
override fun i(tag: String, msg: String) {
println("$tag : $msg")
}
override fun e(tag: String, msg: String, throwable: Throwable?) {
println("$tag : $msg")
}
}
Run Code Online (Sandbox Code Playgroud)
在安卓中
class AndroidPlatformLog : PlatformLog {
override fun i(tag: String, msg: String) {
Log.i(tag, msg)
}
override fun e(tag: String, msg: String, throwable: Throwable?) {
Log.e(tag, msg, throwable)
}
}
Run Code Online (Sandbox Code Playgroud)
用途:在安卓中
private val log: PlatformLog = AndroidPlatformLog()
public override fun onCreate(savedInstanceState: Bundle?) {
log.i(TAG, "onCreate $savedInstanceState")
}
Run Code Online (Sandbox Code Playgroud)
测试中
private val log: PlatformLog = SystemPlatformLog()
@Test
fun `should log in System`() {
log.i(TAG, "called from tests")
}
Run Code Online (Sandbox Code Playgroud)
OR 与 dagger2 在两种情况下:
@Inject lateinit var log: PlatformLog
public override fun onCreate(savedInstanceState: Bundle?) {
log.i(TAG, "onCreate $savedInstanceState")
}
Run Code Online (Sandbox Code Playgroud)
在测试中
class MyTest{
@Inject lateinit var log: PlatformLog
@Before
fun setUp() {
val component = DaggerTestComponent.builder().testModule(TestModule()).build()
component.inject(this)
}
@Test
fun `should log in System`() {
log.i(TAG, "called from tests")
}
@Module
open class TestModule {
@Provides
@Singleton
open fun providePlatformLog(): PlatformLog {
return SystemPlatformLog()
}
}
@Singleton
@Component(modules = [TestModule::class])
interface TestComponent {
fun inject(test: MyTest)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8292 次 |
最近记录: |