当前位置: 首页 > 面试题库 >

模拟java.time.format.DateTimeFormatter类

段干宏硕
2023-03-14
问题内容

我正在尝试模拟DateTimeFormatter类。我已经完成以下工作:

@RunWith(PowerMockRunner.class)
@PrepareForTest({DateTimeFormatter.class})
public class UnitTest {

private DateTimeFormatter mockDateFormatter;

private AwesomeClass awesomeClass;

@Before
public void setUp() {
    mockDateFormatter = PowerMockito.mock(DateTimeFormatter.class);
    awesomeClass = new AwesomeClass(mockDateFormatter);
}

@Test
public void shouldToTestSomethingAwesome() {
   // Other test code
    PowerMockito.when(mockDateFormatter.format(any(LocalDate.class)))
                    .thenReturn("20150224");
   // Other test code

}

AwesomeClass用它格式化LocalDateTime.now(ZoneId.of("UTC"));。然后,格式化的字符串将进一步用于生成另一个字符串。我需要确保正确生成字符串。因此,我需要从格式化程序返回一个一致的日期,或者模拟LocalDateTime.now(..)静态方法

我究竟做错了什么?


问题答案:

模拟的替代方法LocalDateTime.now()是将时钟注入您的类并更改您的(或添加另一个)构造函数,如下所示:

AwesomeClass(DateTimeFormatter fmt, Clock clock) {
  //instead of LocalDateTime now = LocalDateTime.now():
  LocalDateTime now = LocalDateTime.now(clock);
}

然后在您的测试中:

new AwesomeClass(formatter, Clock.fixed(the time you want here));


 类似资料:
  • 问题内容: 对于单元测试,我需要模拟几个依赖项。依赖项之一是实现接口的类: 我需要设置一个此类的模拟对象,当提供一些指定参数时,该对象将返回一些指定值。 现在,我不确定的是,模拟接口或类是否更好 与 在测试方面有什么不同吗?首选的方法是什么? 问题答案: 在您的情况下,可能不会有太大的区别,但是首选的方法是模拟接口,就像通常情况下,如果您遵循TDD(测试驱动开发),那么即使在编写实现类之前,也可以

  • 问题内容: 我正在开发一个Web应用程序,该应用程序显然在iOS设备中存在问题。问题是我不拥有iOS设备,而是在Linux Ubuntu中进行开发。我正在寻找一种在Linux(尤其是浏览器)中仿真/模拟此OS的方法,但是还没有找到任何东西。 到目前为止,我发现的是iOS SDK的Simulator,但这是针对Mac的。还有一些Windows模拟器。有人做过吗? 问题答案: 我能想到的唯一解决方案是

  • 上面还有第二个问题。当我在Expects块中定义mock类时(如上),似乎只调用了构造函数,而不是,因此没有正确初始化对象。我通过将它移到方法中并在那里实例化该类来解决这个问题。看起来是这样的: 因此,这似乎得到了要调用的正确构造函数,但似乎还在调用。有什么见解吗?

  • 问题内容: 我在Python中使用时遇到了一些困难: 测试实际上返回正确的值,但它是Mock对象,不是。您如何在Python库中模拟属性? 问题答案: 您需要使用和: 这意味着:调用时,在该调用的返回值上,为属性设置a以返回value 。

  • 问题内容: 任何人都可以对如何最好地使用EasyMock进行呼叫提出任何建议吗? 我可以将调用移到另一个实现接口的类中的方法中,而不是在理想环境中。 我想知道是否还有其他建议? 问题答案: 你的班级不应该打电话。它应该期望将a 设置为其依赖项,并对其进行处理。然后,在测试中,您可以轻松提供一个模拟并将其设置为依赖项。 作为旁注,我建议您观看有关面向对象设计的本课程以提高可测试性。 更新: 我没有看

  • 我使用JDK1.6.0_24,当我尝试用Mockito模拟HTTP会话时,我出现了下一个错误: