java.time.LocalDate.now() をモックするにはどうしたらいいですか?
2023-07-16 13:21:20
質問
私のテストケースでは、私は時間の影響を受けるメソッドをテストする必要があり、そのメソッドでは、Java 8のクラスLocalDateを使用している、それは次のとおりです。 Jodaではありません です。 .
テスト実行中に時間を変更するにはどうしたらよいですか。
どのように解決するのですか?
コード内で
LocalDate.now()
を
LocalDate.now(clock);
.
次に
Clock.systemDefaultZone()
を渡すと
固定クロック
をテスト用として使用します。
これは例です。
まず
Clock
. Spring Bootを使用している場合は、.NET Frameworkをインストールするだけです。
@Bean
public Clock clock() {
return Clock.systemDefaultZone();
}
次に
LocalDate.now(clock)
をコード内で呼び出します。
@Component
public class SomeClass{
@Autowired
private Clock clock;
public LocalDate someMethod(){
return LocalDate.now(clock);
}
}
さて、ユニットテスト・クラスの内部では.
// Some fixed date to make your tests
private final static LocalDate LOCAL_DATE = LocalDate.of(1989, 01, 13);
// mock your tested class
@InjectMocks
private SomeClass someClass;
//Mock your clock bean
@Mock
private Clock clock;
//field that will contain the fixed clock
private Clock fixedClock;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
//tell your tests to return the specified LOCAL_DATE when calling LocalDate.now(clock)
fixedClock = Clock.fixed(LOCAL_DATE.atStartOfDay(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault());
doReturn(fixedClock.instant()).when(clock).instant();
doReturn(fixedClock.getZone()).when(clock).getZone();
}
@Test
public void testSomeMethod(){
// call the method to test
LocalDate returnedLocalDate = someClass.someMethod();
//assert
assertEquals(LOCAL_DATE, returnedLocalDate);
}
関連
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] HashMapを直接(リテラルに)初期化する方法は?
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] java.time.LocalDateTimeとjava.util.Date間の変換について
-
[解決済み】array[idx++]+="a "は、Java 8ではidxを1回増やすが、Java 9と10では2回増やすのはなぜか?
-
[解決済み】Java 8 の Date Time API (java.time) と Joda-Time の相違点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NullPointerException - java.lang.
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
Javaジェネリックを1つの記事で
-
Junitのユニットテストはjava.lang.Testを報告します。
-
配列定数は初期化子でのみ使用可能です。
-
ジャバアレイ
-
代入の左辺は変数でなければならない 解答
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
switch case文のcaseの後の列挙定数は列挙型なし
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。