- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑如下使用 PowerMockRunner
的 DateUtilTest
类:
import com.reporting.utils.DateUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.time.LocalDate;
import java.util.Date;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@PrepareForTest(DateUtil.class)
@RunWith(PowerMockRunner.class)
public class DateUtilTest {
@Test
public void getPreviousWorkingDayAsDate_whenMonday() {
//given
LocalDate date = LocalDate.of(2017, 10, 16);
LocalDate expected = LocalDate.of(2017, 10, 13);
mockStatic(LocalDate.class);
when(LocalDate.now()).thenReturn(date);
//when
Date previousWorkingDay = DateUtil.getPreviousWorkingDayAsDate();
//then
assertEquals(DateUtil.getDateFromLocalDate(expected), previousWorkingDay);
}
@Test
public void getPreviousWorkingDayAsDate2_whenMonday() {
//given
LocalDate date = LocalDate.of(2017, 10, 16);
mockStatic(LocalDate.class);
when(LocalDate.now()).thenReturn(date);
//when
Date previousWorkingDay = DateUtil.getPreviousWorkingDayAsDate();
LocalDate expected = LocalDate.of(2017, 10, 13);
//then
assertEquals(DateUtil.getDateFromLocalDate(expected), previousWorkingDay);
}
}
我想了解为什么 @Test
==> getPreviousWorkingDayAsDate2_whenMonday
在我移动 expected
LocalDate
初始化时失败在模拟 LocalDate.class
之后?
此外,是否可以改进此测试?
最佳答案
此外,是否可以改进此测试?
是 - 重构 DateUtil 以能够使用特定的 Clock
。例如:
public class DateUtil {
private static Clock clock = Clock.systemDefaultZone();
public static setClock(Clock clock) {
assertNotProduction(); // optionally check for an environment/system variable to throw exception if used in production
DateUtil.clock = clock;
}
public static Date getPreviousWorkingDayAsDate() {
LocalDate today = LocalDate.now(clock); // use clock
...
return ...;
}
}
然后单元测试不需要任何模拟。例如:
@Test
public void getPreviousWorkingDayAsDate_whenMonday() {
//given
LocalDate monday = LocalDate.of(2017, 10, 16);
Clock clock = Clock.fixed(monday.atStartOfDay(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault());
DateUtil.setClock(clock);
LocalDate lastFriday = LocalDate.of(2017, 10, 13);
//when
Date previousWorkingDay = DateUtil.getPreviousWorkingDayAsDate();
//then
assertEquals(DateUtil.getDateFromLocalDate(lastFriday), previousWorkingDay);
}
@After
public void resetClock() {
DateUtil.setClock(Clock.systemDefaultZone());
}
关于java - 将 PowerMockRunner 与 LocalDate 类一起使用来模拟今天的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611458/
我是第一次尝试使用 Powermock 我使用 build.gradle 并添加: dependencies { ... testCompile 'org.mockito:mockito-al
我遇到了在 Eclipse 中使用 EclEmma 插件的问题。 当我使用注释时,它不显示代码覆盖率 @RunWith路过(PowerMockRunner.class)作为论据。如果使用 (Mocki
目前我的测试类有以下内容: @RunWith(Parameterized.class) @RunWith(PowerMockRunner.class) public class TestApp ext
我无法使用 Powermock 测试运行器运行非常简单的测试类。它会导致 ExceptionInInitializerError。它看起来是类路径上的依赖项的问题,但是,我尝试了依赖项版本的几个变体,
我的本地单元测试始终使用 LiveData。通常,当您尝试在 MutableLiveData 上设置值时,您会得到 java.lang.RuntimeException: Method getMa
我正在尝试让 RunWith(PowerMockRunner.class) 使用我现有的包注释。 版本: powermock 1.4.12 mockito 1.9.0 junit 4.8.2 pack
我需要模拟一个类的静态方法并在我的测试中使用该模拟方法。现在看来我只能使用 PowerMock 来做到这一点。 我用@RunWith(PowerMockRunner.class) 注释类,并用适当的类
根据the PowerMock docs ,我应该能够使用 PowerMockRule 而不是 @RunWith(PowerMockRunner.class) 运行并获得相同的结果。 我似乎发现了一个
我正在尝试使用 PowerMockRunner 创建一个 Junit 测试套件,但它不起作用。 @RunWith(PowerMockRunner.class) @PowerMockRunnerDele
考虑如下使用 PowerMockRunner 的 DateUtilTest 类: import com.reporting.utils.DateUtil; import org.junit.Test;
我想使用 PowerMock 重写包 protected 类中的方法,以进行我在 Android 项目上进行的一些测试。我相信这是执行此操作的正确方法,以便我可以代理我想要代理调用的方法。 我的测试位
我正在进行单元测试。我们的项目正在与 Play!框架。单元测试是用 Java 编写的。我们的团队遇到了一个问题,即我们遇到了使用 @RunWith(PowerMockRunner.class) 注解并
我正在尝试测试 JavaMail api 并使用 SpringRunner 和 PowerMockRunner,但它失败了。 @RunWith(PowerMockRunner.class) @Powe
我有以下代码: @RunWith(PowerMockRunner.class) @PrepareForTest({RequestUtils.class, OsgiUti
我有一个基于 Gradle 的 Java 项目,现在我想使用 PowerMock 模拟私有(private)方法。问题是我无法使用 PowerMockRunner,因为当我添加 @RunWith(or
我有一个 gradle 文件 testCompile('junit:junit') testCompile('org.powermock:powermock-core:1.6.5') testComp
我正在尝试使用 power mockito 编写单元测试用例。 使用注释时@RunWith(PowerMockRunner.class) 我收到以下编译错误:- TypeMismatch: canno
当我使用 MockitoJunitRunner 测试以下函数时,它按预期工作正常。但是当我使用 PowerMockRunner 运行相同的测试时,出现以下异常: org.jasypt.exceptio
我正在尝试让 PowerMockito 与我的应用程序一起工作。我已将库添加到构建路径。我有以下测试类: package client.controller; import org.junit.Tes
我在项目中使用lucene 3.5.0版本,在一些单元测试中使用PowerMockRunner模拟静态方法。现在我想将 lucene 升级到版本 3.6.2,但在执行与 PowerMockRunner
我是一名优秀的程序员,十分优秀!