前提・実現したいこと
「本日を含む年から10年間の年を取得する」という機能を持つ
LocalDate.nowを使用したメソッドのテストを作成しているのですが、
下記のようなエラーメッセージが出ました。
発生している問題・エラーメッセージ
org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'. For example: when(mock.getArticles()).thenReturn(articles); Also, this error might show up because: 1. you stub either of: final/private/equals()/hashCode() methods. Those methods *cannot* be stubbed/verified. Mocking methods declared on non-public parent classes is not supported. 2. inside when() you don't call method on mock but on some other object.
テスト対象のメソッド
Java
1public class ClassificationUtil { 2 public static List<OptionValueText> createYearList() { 3 int currentYear = LocalDate.now().getYear(); 4 List<OptionValueText> resultList = new ArrayList<OptionValueText>(); 5 for (int year = currentYear - 9; year <= currentYear; year++) { 6 resultList.add(new OptionValueText(String.valueOf(year), String.valueOf(year))); 7 } 8 return resultList; 9 } 10}
テストしたいこと
Java
1/** 年月"年"に当年含む過去10年を正しく得られるかをテストしたい */ 2@RunWith(PowerMockRunner.class) 3@PrepareForTest({ClassificationUtil.class, LocalDate.class}) 4@SpringBootTest 5class ClassificationUtilTest { 6 @Test 7 void createYearList() { 8 LocalDate dummy = LocalDate.of(2018, 1, 1); 9 PowerMockito.spy(LocalDate.class); 10 PowerMockito.when(LocalDate.now()).thenReturn(dummy); 11 12 List<OptionValueText> optionValueTextList = ClassificationUtil.createYearList(); 13 14 assertEquals("2009", optionValueTextList.get(0).getValue()); 15 } 16}
試したこと
以前類似の質問があったので、
https://teratail.com/questions/141410
を参考にテストコードを書きましたがエラーになってしまいます。
補足情報(FW/ツールのバージョンなど)
・mockitoを使用した他のメソッドのテストは問題なく動作しています
環境:SpringBoot、Meiven、IntelliJ、Thymeleaf
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/01 00:17 編集
2019/11/01 05:07