在ActivityUnitTestCase的JavaDoc中,它说:
请勿使用setUp()方法调用。您必须从每个测试方法中调用此方法。
考虑到该方法背后的整个想法是做到这一点,即在每次测试之前执行某些事情,是不是在每个测试方法中放入等同于放入setUp
的东西?
另外,为什么我们不允许这样做?我试过了,它运作得很好。
答案 0 :(得分:3)
似乎setUp与测试项目的类加载器一起运行,而实际的测试方法与测试的类加载器下的app一起运行。例如,请参阅RoboGuice邮件列表中的讨论:
http://groups.google.com/group/roboguice/browse_thread/thread/2e129f87ead10b10
为什么会这样,我不确定(这对我来说似乎是一个非常奇怪的设计决定)。但结果是你无法在setUp方法中访问被测应用程序中的任何内容。这将setUp转移到巧克力茶壶领域。
请注意,如果您按照此处所述测试库项目,则此限制不适用:
http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/
因为在这种情况下,测试和测试中的代码都在一个应用程序中。
答案 1 :(得分:0)
这可能与startActivity在当前(检测)线程上运行Activity的onCreate方法,而不是将其切换到UI线程这一事实有关:http://google.com/codesearch#uX1GffpyOZk/test-runner/src/android/test/ActivityUnitTestCase.java&l=103。如果使用@UiThreadTest注释测试方法,那么它们将在UI线程中运行,但setUp不会,这可以解释该指令。
答案 2 :(得分:-1)
我认为他们之所以说这更像是一种“最佳实践”,而不是一种快速的技术原因(注意:我可能错了)。原因是如果每个单独的测试方法基本上是自包含的,那么创建不同的测试套件会更容易,这些测试套件将执行您需要的EXACT测试,而不是在setUp()上运行ActivityTestCase中的每个测试。