2016-05-30 34 views
0

我想要坚持不懈。并创建一些测试应用程序,然后尝试测试。我有简单的活动,并且在此活动中我有方法checkEditText此方法返回true或false。这是我的活动:我做错了什么? Android JUnit

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
} 

public boolean checkEditText(int number) { 
     return number > 0 ? true : false; 

    } 

这是测试:

package ac.junit2; 


import android.test.ActivityInstrumentationTestCase2; 

import org.junit.Assert; 

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { 

    public MainActivityTest() { 
     super(MainActivity.class); 
    } 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 

     MainActivity activity = getActivity(); 
     Assert.assertNotNull(activity); 
    } 



    public void testCheckNumber() { 
     MainActivity activity = getActivity(); 

     boolean action = activity.checkEditText(0); 
     assertTrue(action); 
    } 


} 

我有错误:

java.lang.AssertionError 
    at org.junit.Assert.fail(Assert.java:86) 
    at org.junit.Assert.assertTrue(Assert.java:41) 
    at org.junit.Assert.assertNotNull(Assert.java:712) 
    at org.junit.Assert.assertNotNull(Assert.java:722) 
    at ac.junit2.MainActivityTest.setUp(MainActivityTest.java:26) 
    at junit.framework.TestCase.runBare(TestCase.java:139) 
    at junit.framework.TestResult$1.protect(TestResult.java:122) 
    at junit.framework.TestResult.runProtected(TestResult.java:142) 
    at junit.framework.TestResult.run(TestResult.java:125) 
    at junit.framework.TestCase.run(TestCase.java:129) 
    at junit.framework.TestSuite.runTest(TestSuite.java:252) 
    at junit.framework.TestSuite.run(TestSuite.java:247) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
+2

嗯,这不是像答案建议的编辑文本。 'MainActivityTest.setUp'中的'Assert.assertNotNull'已经失败。我不知道'getActivity()'应该如何工作,但它显然没有给你带来任何东西。 – zapl

+0

我想知道的另一件事:你不需要在你的测试方法中使用'@ Test'注释吗? Junit应该如何知道它应该调用'testCheckNumber()'? – GhostCat

回答

1

因为0不大于0,所以

return number > 0 ? true : false; 

当数字为0时将返回错误。

在测试中,你断言是真的,但结果是错误的。

1

测试失败,就像您编程时那样。​​的结果是false,因为您定义的方法返回false,除非参数是大于大于0.然后在您的测试中,您声明结果应该是true

+0

他在他的问题中有一个例外非常清楚:他的'setUp()'方法已经出现失败。这意味着'getActivity()'调用返回null。所以你的回答并没有解决当前的问题。最有可能的是,他的实际测试方法从来没有被首先调用(或者你看到了一个'@ Test'注释)? – GhostCat

+0

@Jägermeister - 好点。当然,接受的答案有同样的问题,不是吗? –

+0

当然。但他是初学者,你的名声不到千分之一;-) – GhostCat