Tag: 测试

如何测试委托属性的生成器?

在我目前的项目中,有一个课程稍后将会由其他人来实施。 这个类为委托的属性提供了一些生成器。 abstract class BaseClass { protected val delegated1 get() = new Delegated1Impl() protected val delegated2 get() = new Delegated2Impl() … } 这个基类可以这样使用: class Example : BaseClass() { var field1 by delegated1 var field2 by delegated2 } 现在我想测试这些委托生成器。 其中一些包含我想要测试的逻辑,但现在我只想知道每次调用它们时都会返回一个新的实例。 现在我的问题是:我怎样才能测试这些发电机? 生成器在扩展类之外是不可见的,所以我不能简单地创建它的一个实例并调用这些方法。 @Test fun `delegated1 should always return a new instance`() { val target = object: […]

什么是测试(0)在这个片段kotlinlang.org?

我在这里试图解决KotlinKoans页面中的“运行”问题 这是我的实现 package runs fun runs(a: IntArray): Int { var numberOfRuns = 1; for (index in 0..a.size-2) { if (a[index+1] != a[index]) numberOfRuns++ } return numberOfRuns } 这里是针对实现运行的测试套件 class Tests { @Test fun testRuns1() { test(0) } @Test fun testRuns2() { test(1, 1) } @Test fun testRuns3() { test(3, 1, 2, 3) } @Test fun […]

模拟方法出错

我试图嘲笑项目中的一些方法,以便在被调用时返回一定的值。 但是当你运行测试时,它们会随输出而下降: org.mockito.exceptions.misusing.InvalidUseOfMatchersException:使用参数匹配器无效! 0 matchers expected,1 recorded: – > at com.hodzi.stackviewer.questions.detail.QuestionDetailPresenterTest.voteTest(QuestionDetailPresenterTest.kt:69) 如果匹配器与原始值结合,则可能发生此异常://不正确:someMethod(anyObject(),“raw String”); 在使用匹配器时,所有参数都必须由匹配器提供。 例如:// correct:someMethod(anyObject(),eq(“String by matcher”)); 如果在调试模式下运行相同的代码并遍历所有行,那么当调用shared.getToken()时,将返回指定的值。 但是正常的启动,测试落在这条线上。 码: import com.hodzi.stackviewer.questions.QuestionsInteractor import com.hodzi.stackviewer.utils.Shared import com.hodzi.stackviewer.utils.Vote import org.junit.BeforeClass import org.junit.Test import org.mockito.ArgumentMatchers import org.mockito.Mockito internal class QuestionDetailPresenterTest { companion object { lateinit var presenter: QuestionDetailPresenter lateinit var view: QuestionDetailView @BeforeClass @JvmStatic fun setUp() { […]

我如何测试AsyncTask没有被调用?

我正在写一些针对Activity的测试。 在我的Activity的onCreate()方法中,我有一个异步调用。 我想写一个测试来验证AsyncTask没有被调用。 我该怎么做? 我试图嘲笑AsyncTask,但我不能因为execute()是最后的方法。 我最初的想法是做这样的事情: val mockedTask = mock(QuoteOfTheDayTask::class.java) verify(mockedTask, never()).execute() 但是现在,遇到一些试图以这种方式进行测试的问题,我开始想,也许我正在以这种错误的方式去做。 这几乎觉得我不应该试图对这个活动进行测试,但是现在这就是调用的地方。

Android系统。 Mockito使用真实的对象而不是模拟

所以,我只是写简单的测试。 问题是测试运行器运行真正的“仓库”类代码,而不是模拟代码…你有什么想法,为什么我可以得到这个例外? 测试课 class SingInFacebookPresenterTest { @Mock private lateinit var view: SignInFacebookContract.View @Mock private lateinit var repository: Repository @Captor private lateinit var callback: ArgumentCaptor<RepositoryCallback.FacebookLoginImp> private lateinit var presenter: SingInFacebookPresenter private val serverToken = "token" @Before fun init() { MockitoAnnotations.initMocks(this) presenter = SingInFacebookPresenter(MockContext(), repository, view) } @Test fun facebook_login_success() { //Given val token = "token" val […]

Android测试失败时,Gradle构建失败,“字符串索引超出范围”

尝试使用Android进行仪器测试时遇到问题。 当其中一个测试失败时,构建失败,但没有声明测试失败。 相反,我得到FAILURE: Build failed with an exception. 对于出错的部分,我得到的String index out of range: -1 。 在我真正的应用程序,这是导致它不生成一个HTML报告,并且XML报告零星生成。 我已经把一个简单的测试用例放在一起,但它正在生成报告,但是另外给出了相同的失败消息。 为了澄清, 测试旨在失败,但我期望一个A test has failed消息,而不是看起来像一个不同的失败原因。 我怀疑这个失败正在导致构建生命周期中的其他事情导致我所看到的信息出错。 这是非常简单的测试应用程序 的build.gradle buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.4.0-alpha7' } } apply plugin: 'com.android.application' repositories { jcenter() mavenCentral() } dependencies { androidTestCompile "com.android.support.test.espresso:espresso-core:2.2.2" androidTestCompile "com.android.support.test.espresso:espresso-intents:2.2.2" androidTestCompile "com.android.support.test:runner:0.5" } […]

Kotlintest拦截器和lateinit变量

我有一些共享通用设置的测试用例。 他们都需要两个可以以相同的方式初始化的领域。 所以我想我可以将它们提取到lateinit var字段中,并在测试用例拦截器中创建它们。 但是当我尝试在我的测试用例中访问它们时,它们总是抛出异常,因为它们没有被初始化。 有没有办法在每个测试用例之前创建字段? 这是我的代码到目前为止: class ElasticsearchFieldImplTest : WordSpec() { // These 2 are needed for every test lateinit var mockDocument: ElasticsearchDocument lateinit var mockProperty: KProperty<*> override fun interceptTestCase(context: TestCaseContext, test: () -> Unit) { // Before Each mockDocument = mock() mockProperty = mock { on {name} doReturn Gen.string().generate() } // Execute Test […]

在测试活动的onCreate期间开始使用Espresso来存根意图

我正在测试在onCreate()期间启动另一个活动的活动。 第二个活动是从startActivityForResult()开始的,然后主活动等待onActivityResult() 。 我试图用Espresso来测试这个,尝试用intending()来存储第二个活动,并且使用intended()来验证它是否发生了。 不过,似乎espresso-intents并不是用onCreate()方法启动的onCreate()来工作的( 请参阅这里最后几段的警告 )。 有没有人设法从onCreate()开始存根意图,如果是的话,怎么样?

Android Studio“没有发现测试”

有没有人能够得到测试运行在Android Studio(从GUI而不是终端),我一直无法从GUI运行测试。 每次尝试通过GUI运行测试时,我都会收到以下消息: 我能够使用以下命令从终端运行测试: ./gradlew connectedAndroidTest 我在Mac OSX上运行Android Studio 0.5.2,使用Gradle 1.11和Plugin 0.9.0 我的项目结构如下; MyProject/ src/ androidTest/ java/ com.myproject.app.test/ … (tests source code) … main/ java/ com.myproject.app/ … (source code) … res/ … (resources code) … build.gradle 我的build.gradle文件看起来类似于以下内容: … android { compileSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { versionCode 12 versionName "2.0" minSdkVersion 9 targetSdkVersion 19 testPackageName […]

Android:仪器运行失败,由于“java.lang.ClassNotFoundException”:未找到测试

我尝试通过“gradlew connectedAndroidTest”运行一个仪器测试。 我得到以下错误: Tests on GT-I9305 – 4.3 failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException' com.android.builder.testing.ConnectedDevice > hasTests[GT-I9305 – 4.3] FAILED No tests found. :mobile:connectedAndroidTest FAILED 这是带有–stacktrace选项的输出: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':mobile:connectedAndroidTest'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79) […]