Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取当前UTC日期时间的单元测试_Java_Unit Testing_Junit - Fatal编程技术网

Java 获取当前UTC日期时间的单元测试

Java 获取当前UTC日期时间的单元测试,java,unit-testing,junit,Java,Unit Testing,Junit,我有这样一种方法: public Date getCurrentUtcDateTime() { // Return UTC time } 我想用JUnit创建一个单元测试 assertEquals( ?????? 正确的方法是什么 如果我编写单元测试代码来计算UTC当前时间,那就不好了,因为我实际上是在重写整个函数。除此之外,两个日期时间的毫秒数也不相同 如果我只是检查结果不为null,那就不好——结果可能仍然是错误的 我还应该尝试什么?为这个函数编写单元测试的正确方法是什

我有这样一种方法:

public Date getCurrentUtcDateTime() {
        // Return UTC time
}
我想用JUnit创建一个单元测试

assertEquals( ?????? 
正确的方法是什么

  • 如果我编写单元测试代码来计算UTC当前时间,那就不好了,因为我实际上是在重写整个函数。除此之外,两个日期时间的毫秒数也不相同

  • 如果我只是检查结果不为null,那就不好——结果可能仍然是错误的

  • 我还应该尝试什么?为这个函数编写单元测试的正确方法是什么

    如果我编写单元测试代码来计算UTC当前时间,那就不好了,因为我实际上是在重写整个函数

    有时候,这是你测试某样东西的唯一方法。也许你可以用另一种方法来获得同样的时间?即使用Joda time而不是标准Java类,反之亦然

    一种测试方法可以是(psuedo代码):

    startTime=getUTCTimeUsingAlternativeMethod();
    resultTime=classUnderTest.getCurrentUtcDateTime();
    endTime=getUTCTimeUsingAlternativeMethod();
    
    验证时间(startTime,因此我多次遇到这个问题。在很多情况下,都会得到前后时间(如建议的)工作正常。但是,在时间转换为字符串的情况下,或者在需要准确时间才能创建良好测试的情况下,我遇到了问题。因此,我创建了一种控制时间的机制(而不是时空连续体)

    我有一个名为的类,它的方法类似于
    getCurrentTime()
    getCurrentDateTime
    。默认行为返回
    new Date()

    然后我有一个JUnit规则,可以用来显式地控制
    DateSupplier
    返回的内容。
    DateController
    规则位于测试库中,因此不应与生产代码一起部署。每次测试后,它将
    DateSupplier
    的行为设置回返回正确当前
    D的默认行为ate

    public Date getCurrentUtcDateTime() {
        // Return UTC time
         Date date = DateSupplier.getCurrentDate();
    }
    
    public class MyTest{
    
         @Rule
         public DateController dateController = new DateController();
    
         private Date currentTime;
    
         @Before
         public void setup(){
            dateController.setCurrentTimeToNow();
            currentTime = DateSupplier.getCurrentTime();
         }
    
         @Test
         public void myTest(){
            Date value = getCurrentUtcDateTime();
    
            // verify
            Date utcDate = // convert currentTime to UTC
            assertThat(value, equalTo(utcDate));
         }
    }
    

    您想测试什么?如果它与模式匹配?请使用模式。考虑到您要测试的函数应该是
    return new Date()
    ,所以它确实值得测试?它不仅仅是new Date(),而是返回UTC。也就是说,我喜欢这种方法。:/1
    public Date getCurrentUtcDateTime() {
        // Return UTC time
         Date date = DateSupplier.getCurrentDate();
    }
    
    public class MyTest{
    
         @Rule
         public DateController dateController = new DateController();
    
         private Date currentTime;
    
         @Before
         public void setup(){
            dateController.setCurrentTimeToNow();
            currentTime = DateSupplier.getCurrentTime();
         }
    
         @Test
         public void myTest(){
            Date value = getCurrentUtcDateTime();
    
            // verify
            Date utcDate = // convert currentTime to UTC
            assertThat(value, equalTo(utcDate));
         }
    }