Tag: junit

如何在Android项目中的Java模块上模拟Mockito 2的最终课程?

我有一个Android Clean Architecture项目,在Kotlin中有三个模块: 数据(Android库) domaine(Java库) 演示(Android应用程序) 这三个模块都有用junit编写的单元测试 。 但是对于Kotlin,每个课程都是默认的最终课程。 我很快就遇到了问题: 如何用mockito来嘲笑最后一堂课 现在可以用Mockito 2 可以通过mockito扩展机制来完成,方法是创建包含一行的文件/mockito-extensions/org.mockito.plugins.MockMaker : mock-maker-inline 此解决方案在数据模块(Android库)和表示模块(Android应用程序)上运行良好, 但在我的domaine模块(Java库)上不起作用 。 我知道这个问题已经被问到( 如何用mockito来模拟最后一个类 , Mock对象用Mockito来调用最终类的静态方法 ),但是我没有找到我正在寻找的答案。

注入构造函数和伴随对象

我对Kotlin是新鲜的,我正在尝试注入一个值(在这个例子中,它只是一个Int,但在真正的代码中它是一个Provider类)我在这里做错了什么? 为什么x是一个未解决的参考? class Test @Inject constructor(private val x: Int) { companion object { var y: Int = 0 @BeforeClass @JvmStatic fun beforeClass() { y = x * 2 } } }

什么访问修饰符可测试辅助方法?

在Java中,辅助方法通常被标记为protected而不是private ,所以在同一个包中的单元测试可以测试辅助方法。 (具体来说,我正在使用JUnit。) 这在Kotlin中似乎不起作用。 建议使用什么访问修饰符?

为什么IntelliJ Idea不能识别我的Spek测试?

我有一个基于Gradle的Kotlin项目,其中包含一些基于JUnit的Spek测试,并且应该与Idea兼容。 但是我没有看到上下文菜单中的“运行”菜单项。 为什么? 为了能像其他JUnit测试一样在Idea中运行Spek测试,我需要做些什么? 这是我的build.gradle : buildscript { ext.kotlin_version = '1.0.4' repositories { mavenCentral() maven { url "https://dl.bintray.com/jetbrains/spek" } } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0-M3' } } apply plugin: "kotlin" apply plugin: "application" apply plugin: 'org.junit.platform.gradle.plugin' junitPlatform { filters { engines { include 'spek' } } } mainClassName = "com.mycompany.myproduct.AppKt" sourceSets { deploy } […]

Kotlin + JUnit + postgres进行集成测试:泄漏连接

我建立了一个运行13个集成测试的测试课程。 所有的测试都涉及1个数据库,1个模式和3个表格。 测试类的设置是为了使用@BeforeClass创建测试数据库,并使用@AfterClass删除测试数据库。 在每个测试的setUp阶段,我迁移模式并用人工数据填充表格。 然后在tearDown阶段,我删除模式。 在每个测试中,我运行我的测试逻辑对测试数据库: class MyTest { companion object { private val helper = MyHelper() @BeforeClass @JvmStatic fun createTestDatabase() { helper.createTestDatabase() } @AfterClass @JvmStatic fun removeTestDatabase() { helper.deleteTestDatabase() } } @Before fun setUp(){ // migrate the schema and populate the tables with artificial data helper.migrate() helper.populate() } @After fun tearDown() { // remove […]

测试环境配置:Android + JUnit 5 + Mockito + Spek + Kotlin

我很难配置基于JUnit Jupiter(5)的测试环境。 我有两个不同的错误: WARNING: TestEngine with ID 'spek' failed to discover tests org.junit.platform.commons.util.PreconditionViolationException: Could not load class with name… Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute(Lorg/junit/platform/launcher/LauncherDiscoveryRequest;)V at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:61)… 配置如下。 主build.gradle : apply plugin: 'org.junit.platform.gradle.plugin' buildscript { ext.kotlin_version = '1.1.4-3' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-beta5' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.junit.platform:junit-platform-gradle-plugin:1.0.0" classpath "de.mannodermaus.gradle.plugins:android-junit5:1.0.0" } } […]

Gradle找不到测试

我正在为我的Kotlin项目使用Spek测试框架。 我能够通过Intellij Idea Spek插件运行测试,但不能通过gradle(构建或测试)运行它们。 根据SimpleTest.kt从Idea插件1运行测试成功和1失败,当通过gradle运行它说1容器找到0测试。 如何设置通过gradle启动测试? 我的gradle和测试文件: 的build.gradle: buildscript { ext.kotlin_version = '1.1.4-2' repositories { mavenCentral() jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4" } } apply plugin: "idea" apply plugin: "java" apply plugin: "kotlin" apply plugin: "application" apply plugin: "org.junit.platform.gradle.plugin" junitPlatform { filters { engines { include 'spek' } } } mainClassName = "app.MainKt" […]

匕首2生成的测试组件不被识别

我希望这只是我在这里做错了。 我试图使用Dagger 2.0为我的JUnit测试注入依赖( 不是Espresso测试 ,只是纯JUnit)。 所以,我有一个“主”的Java模块和一个“测试”的Java模块。 在主模块中,我有一个Dagger模块和一个组件: @Module public class MainModule { @Provides public Widget provideWidget() { return new ConcreteWidget(); } } … @Component (modules = MainModule.class) public interface MainComponent { void inject(WidgetConsumer consumer); } 在我的测试模块中,我有以下几点: @Module public class TestModule { @Provides public Widget provideWidget() { return new Widget() { @Override public void doThing() { […]

Kotlin Back-Tick在方法名称中转义:它是如何工作的?

我发现,在Kotlin中可以命名这样的方法: fun `i am a test method`(){ Assert.assertEquals("x", "x") } 编译器生成一个带有下划线而不是空格的方法:“i_am_a_test_method”,这似乎是合理的,因为JVM 不允许带空格的方法。 Junit和/或Gradle如何使用备份名称报告这些测试?

孩子Kotlin测试类运行所有父母测试

我正在使用Kotlin和JUnit。 我有一个父测试抽象类,其中包含一些测试实现和一些抽象测试。 @Test abstract fun testThis() @Test fun testThat() { assert(true) } 在我的孩子类中,我有testThis()的实现。 @Test override fun testThis() { assert(1 == 1) } 而在另一个孩子班,我有另一个实现: @Test override fun testThis() { assert(2 == 3) } 但是,当我运行IntelliJ的所有测试,我可以看到testThat()被调用两次,每个孩子一次。 我如何阻止这种情况发生? 我希望测试只能运行一次,作为它们各自类的一部分(在这种情况下, testThat()应该在父类中执行一次)。 我的设计有问题吗?