Articles of junit4

在设备操作testing期间,“animation师只能在Looper线程上运行”

这是我的testing代码: @RunWith(AndroidJUnit4.class) @SmallTest public class WelcomeActivityTests extends BaseTest { ApplicationController applicationController; @Rule public ActivityTestRule<WelcomeActivity> activityTestRule = new ActivityTestRule<>(WelcomeActivity.class); ArgumentCaptor<Callback> argumentCaptor; @Before @Override public void setUp() { applicationController = (ApplicationController) InstrumentationRegistry.getTargetContext().getApplicationContext(); applicationController.setMockMode(true); argumentCaptor = ArgumentCaptor.forClass(Callback.class); super.setUp(); } @Test public void testLogin() throws InterruptedException { onView(withId(R.id.btnLogInW)).perform(click()); onView(withId(R.id.email)).perform(typeText("good.email@example.com")); onView(withId(R.id.passL)).perform(typeText("strong.password")); onView(withId(R.id.btnLogInL)).perform(click()); User user = new User(); user.first_name = "Fake […]

在Android上使用EspressotestingEditText错误

我想testing一个EditText字段是否有错误(使用editText.setError(“Can not be blank!”))。 我用新的AndroidStudio 2.2function创build了一个Espressotesting用例来loggingEspressotesting。 所以代码几乎是自动生成的。 但现在它只检查是否显示editText。 @RunWith(AndroidJUnit4.class) public class CreateNoteActivityTitleCannotBeBlank { @Rule public ActivityTestRule<CreateNoteActivity> mActivityTestRule = new ActivityTestRule<>(CreateNoteActivity.class); @Test public void createNoteActivityTitleCannotBeBlank() { ViewInteraction floatingActionButton = onView( allOf(withId(R.id.fab_add_note), withParent(allOf(withId(R.id.activity_create_note), withParent(withId(android.R.id.content)))), isDisplayed())); floatingActionButton.perform(click()); ViewInteraction editText = onView( allOf(withId(R.id.tiet_note_title), childAtPosition( childAtPosition( withId(R.id.til_title), 0), 0), isDisplayed())); editText.check(matches(isDisplayed())); } private static Matcher<View> childAtPosition( final Matcher<View> parentMatcher, final […]

调用Robolectric.buildActivity()时资源$ NotFoundException

我在Android Studio中使用Robolectric 3.0 RC3进行unit testing。 每次运行testing时都会收到一个ResourceNotFoundExceptionexception。 请帮我解决这个问题。 的build.gradle dependencies { testCompile 'junit:junit:4.12' compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' testCompile 'org.mockito:mockito-core:1.9.5' testCompile 'org.robolectric:robolectric:3.0-rc3' compile 'com.ibm.icu:icu4j:53.1' } testing类 @Before public void setUp() throws Exception { activity = Robolectric.buildActivity(MainActivity.class).create().get(); } @Test public void pressingTheButtonShouldStartTheListActivity() throws Exception { //Something to test } 所以,每当Robolectric.buildActivity()我得到Resources$NotFoundException 。 资源#0x7f040016指向R.layout.activity_main (xml)。 跟踪id跟踪堆栈 – […]

Android:unit testing一个服务

我目前正在尝试使用TDD编写Android应用程序。 我已经被赋予了编写一个在应用程序中非常重要的服务的任务。 至于这个原因,我试图写一个适当的testing服务。 Android指南声明如下: “testing内容”主题列出了testingAndroid组件的一般注意事项。 以下是testing服务的一些具体指导原则: 确保调用onCreate()以响应Context.startService()或Context.bindService()。 同样,你应该确保onDestroy()被调用来响应Context.stopService(),Context.unbindService(),stopSelf()或stopSelfResult()。 testing您的服务是否正确处理来自Context.startService()的多个调用。 只有第一个调用会触发Service.onCreate(),但是所有的调用都会触发对Service.onStartCommand()的调用。 另外,请记住,startService()调用不会嵌套,因此对Context.stopService()或Service.stopSelf()(但不是stopSelf(int))的单个调用将停止服务。 您应该testing您的服务在正确的点停止。 testing你的服务实现的任何业务逻辑。 业务逻辑包括检查无效值,财务和算术计算等等。 来源:服务testing| Android开发者 我还没有看到这些生命周期方法的正确testing,多次调用Context.startService()等。我试图找出这一点,但我目前在亏损。 我试图用ServiceTestCase类testing服务: import java.util.List; import CoreManagerService; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Before; import org.junit.Test; import android.app.ActivityManager; import android.app.ActivityManager.RunningServiceInfo; import android.content.Context; import android.content.Intent; import android.test.ServiceTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.util.Log; /** * * This test should be executed on […]

Android JUnit4testing

我想运行一些JUnit4testing。 该代码依赖于一些Android库(Android XMLparsing器),但不会创build任何活动等等。 当我尝试运行testing时,我得到了一个我没有find的Android类。 有没有办法用Android代码运行JUnit4testing,而不是testing活动,而是用一些库来testing代码。

Robolectric + Eclipse找不到资源?

我刚刚为我的Android应用程序configuration了一个testing项目来使用Robolectric。 我遵循Eclipse快速入门 。 执行我简单的第一个testing就引发了一个exception。 java.lang.RuntimeException: java.lang.NullPointerException at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:93) at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271) at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56) at android.content.res.Resources.getString(Resources.java) at org.xxx.mobile.android.teldir.app.TelephoneDirectoryTest.searchButtonLabelShouldBeGo(TelephoneDirectoryTest.java:22) […] Caused by: java.lang.NullPointerException at com.xtremelabs.robolectric.res.StringResourceLoader.getValue(StringResourceLoader.java:17) at com.xtremelabs.robolectric.res.StringArrayResourceLoader.processNode(StringArrayResourceLoader.java:39) at com.xtremelabs.robolectric.res.XpathResourceXmlLoader.processResourceXml(XpathResourceXmlLoader.java:27) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlFile(DocumentLoader.java:58) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:52) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:39) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDir(ResourceLoader.java:142) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDirs(ResourceLoader.java:136) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResources(ResourceLoader.java:109) at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:85) at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271) at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.xtremelabs.robolectric.bytecode.ShadowWrangler.methodInvoked(ShadowWrangler.java:87) […]

Android Studio简单unit testing不起作用

我正在尝试在AndroidStudio中做一个简单的unit testing,它不工作。 我已经尝试了很多教程,但直到现在还没有成功。 当我运行testing时,显示这个错误信息: java.lang.RuntimeException: Method setUp in android.test.ActivityInstrumentationTestCase2 not mocked. 我的testing课: public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { public MainActivity activity; public MainActivityTest() { super(MainActivity.class); } @Before public void setUp() throws Exception { super.setUp(); activity = getActivity(); } @Test public void testApp() throws Exception { assertTrue(true); } @After public void tearDown() throws Exception { super.tearDown(); […]

使用mockito和事件监听器进行unit testingMVP

Android Studio 2.1.2 我想testingLoginModelImp中onUsernameError,onPasswordError和onSuccess的callback是否被实际调用。 我不知道如何testing事件监听器。 但是,testing失败,因为这些function从来没有被调用。 我正在用mockito嘲笑他们,并试图validation他们。 这是我的代码到目前为止。 演示者界面 public interface LoginPresenterContract<LoginFragmentViewContract> { void validateCredentials(); void attachView(LoginFragmentViewContract view); void detachView(); } 演示者实施 public class LoginPresenterImp implements LoginPresenterContract<LoginFragmentViewContract>, LoginModelContract.OnLoginCompletedListener { private LoginModelContract mLoginModelContract; private LoginFragmentViewContract mLoginFragmentView; public LoginPresenterImp(LoginModelContract loginModelContract) { mLoginModelContract = loginModelContract; } /* * LoginPresenterContact – implementation */ @Override public void attachView(LoginFragmentViewContract view) { […]

我怎样才能在Junit3中获得@BeforeClass和@AfterClass等价物?

在replacetesting夹具之前,我想备份我的应用程序的数据库。 由于Android的限制,我不得不使用Junit3,我想实现@BeforeClass @AfterClass的等价行为。 更新:现在有一个工具( Junit4Android )在Android上获得对Junit4的支持。 这是一个混乱,但应该工作。 为了实现@BeforeClass的等价物,我一直在使用静态variables并在第一次运行时初始化它,但是我需要能够在运行所有testing之后恢复数据库。 我想不出一种检测最后一次testing运行的方式(因为我相信在testing执行的顺序上没有保证)。 public class MyTest extends ActivityInstrumentationTestCase2<MainActivity> { private static boolean firstRun = true; @Override protected void setUp() { if(firstRun) { firstRun = false; setUpDatabaseFixture(); } } … }

testingClassNotFoundexception

我试图testing在Android上没有find一个类与UnitTest。 这是怎么回事: 1.我正在编写一个带有transitive依赖关系的Android库,它在主机应用程序中parsing 2.开发人员可能会删除一些依赖项,例如删除所有的com.example.package 3.我有一个工厂将尝试实例化(使用reflection)一个对象,并捕获ClassNotFoundException 。 如果开发人员删除依赖关系,则应抛出exception。 4.我想testing这种情况,但是我发现的只是依赖关系的问题,而不是如何testing。 我想testing的代码示例 try { sNetworkResponseBuilderClass = OkHttpNetworkResponse.Builder.class; } catch (Exception e){ // <<<< I want to test this case new ClassNotFoundException("Unable to find OkHttpNetworkResponse.Builder.class").printStackTrace(); return null; } 使用的库: hamcrast,mockito,JUnit 4。 你知道该怎么做吗?