0

Date.parse()を呼び出すメソッドのテストを書いています。コードは次のようになります

    public void someMethod(String s){

         Date date = new Date();

         date.setTime(Date.parse(s));

         //other methods
    }

私のテストでは、私はこのようなことをしました

    public void test(){
          ...

          Date date = new Date();
          someMethod(date.toString());

          //assert statements
    }

それは私のマシンでうまく機能します、私は私の日食とIntelliJIDEAでそれを試しました。ただし、ビルドのためにサーバーにプッシュすると、テストは失敗します。IllegalArgumentExceptionをスローします。私のチームメイトも同じ例外を受け取ります。同じSDKを使用しています:jdk1.7.0とIDEEclipseおよびIntelliJ。唯一の違いは、マシンにjre7がインストールされていることです。また、簡単なテストを試しました。

    public void test(){
          Date d = new Date();
          String s = d.toString();

          Date e = new Date();
          e.setTime(Date.parse(s));

          sysout(e);
    } 

私のマシンではうまく機能しますが、彼のマシンではIllegalArgumentExceptionを受け取ります。テスト対象のメソッドを変更できないため、文字列から日付への他の変換を実行できません。ありがとう

編集-StackTrace

    java.lang.IllegalArgumentException
        at java.util.Date.parse(Date.java:598)
        at package.Class.Method(Class.java:135)
        at package.TestClass.TestMethod(TestMethod.java:192)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:312)
        at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
        at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:296)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:112)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:73)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:284)
        at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
        at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:209)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:148)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:122)
        at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
        at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
        at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102)
        at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
        at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:42)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)

申し訳ありませんが、正しく編集できません。私のマシンではjavascriptが無効になっています

4

4 に答える 4

2

Date.toString()Date.parse()ロケールに依存します。その結果、toString()の出力が。によって明確に読み取れない可能性がありparse()ます。日付のタイムスタンプは単なる数値であり、したがって一意であるため、渡す方がよいでしょう。

于 2012-08-23T01:24:28.773 に答える
1

Javadoc によると、 JDK1.1Date.parse()で非推奨になりました。

したがって、次のコードを変更することをお勧めします。

Date d = new Date();
String s = d.toString();

Date e = new Date();
e.setTime(Date.parse(s));

このようなもので:

Date d = new Date();

Date e = new Date(); 
e.setTime(d.getTime());
于 2012-08-23T02:28:31.130 に答える
1

これで問題が解決しない場合もありますが、DateFormatterクラスを確認することはあなたのケースに非常に役立つと思います。

于 2012-08-23T05:05:16.997 に答える
0

Date.parse()はまだ非推奨です。以下のように方法を変更して、再試行してください。

public void someMethod(String s){
     Date date = new Date();
     try {
      date=DateFormat.getDateInstance().parse(s);
     } catch (ParseException e) {

     e.printStackTrace();
     }


     //other methods
}
于 2012-08-23T05:57:25.640 に答える