我需要一些使用jmockit和kotlin的建议.
(CUT)这是我测试的(Java)类:
public final class NutritionalConsultant {
public static boolean isLunchTime() {
int hour = LocalDateTime.now().getHour();
return hour >= 12 && hour <= 14;
}
}
Run Code Online (Sandbox Code Playgroud)
(j.1)这是一个有效的Java测试类
@RunWith(JMockit.class)
public class NutritionalConsultantTest {
@Test
public void shouldReturnTrueFor12h(@Mocked final LocalDateTime dateTime) {
new Expectations() {{
LocalDateTime.now(); result = dateTime;
dateTime.getHour(); result = 12;
}};
boolean isLunchTime = NutritionalConsultant.isLunchTime();
assertThat(isLunchTime, is(true));
}
}
Run Code Online (Sandbox Code Playgroud)
(kt.1)但是,相应的kotlin类会引发异常
RunWith(javaClass<JMockit>())
public class NutritionalConsultantKt1Test {
Test
public fun shouldReturnTrueFor12h(Mocked dateTime : LocalDateTime) {
object : Expectations() {{
LocalDateTime.now(); result …Run Code Online (Sandbox Code Playgroud) 我正在构建一个已经在分析我的Java 8/Gradle 3.3项目的SonarQube 6.2服务器.将JaCoCo添加到多模块gradle项目时,我意识到SonarQube正在"按模块"测量代码覆盖率:
如果一个类位于模块中A并且该类的测试位于模块中B,则SonarQube会指出该类未被覆盖.
我想测量所有模块的代码覆盖率,而不是基于每个模块.我该如何实现这一目标?
有很多类似的问题,但没有有用的答案,虽然这种情况对我来说似乎很常见.例如Jenkins默认情况下这样做.
主要build.gradle包括
plugins { id "org.sonarqube" version "2.2.1" }
subprojects {
apply plugin: 'java'
apply plugin: 'jacoco'
repositories { mavenCentral() }
dependencies { testCompile "junit:junit:4.12" }
}
Run Code Online (Sandbox Code Playgroud)
modA/build.gradle是空的.
它包括3类:TestedInModA,TestedInModATest和TestedViaModB.
modB/build.gradle只是声明一个依赖modA:
dependencies { compile project(':modA') }
Run Code Online (Sandbox Code Playgroud)
它只包含一个类:TestedViaModBTest,测试TestedViaModB位于的类modA.
我的(私有)Jenkins实例显示了包括的两个类的100%覆盖率,而SonarQube说只有类TestedInModA(在其自己的模块中测试)被覆盖.
如何修改构建过程以查看SonarQube中的"跨模块覆盖"?
我很想更新我的项目,以便将来访问此问题的访问者可以找到一个有效的例子.
我的工作解决方案(感谢@Godin)
将以下内容添加到subprojects闭包中 …