단위 테스트를 시작했지만 여전히 테스트 방법을 모릅니다. 내 응용 프로그램은 2 params, 공연장의 개장과 닫는 시간을 받고 현재 시간에 공연장이 열려 있으면 true를 반환하고 그렇지 않으면 false를 반환하는 메서드가 있습니다. 내부적으로이 메서드는 을 사용하여 현재 시간을 가져옵니다. 이 메서드를 제대로 테스트하려면 Calendar 클래스에서 원하는 설정 시간을 반환 할 수 있습니까? Microsoft Fake 프레임 워크에는 시스템 클래스의 반환 값을 가짜로 만드는 shims
이라는 것이 있습니다. Robolectric 프레임 워크에서 유사한 기술을 알고 있습니까?Robolectric : 캘린더 클래스가 반환 할 시간을 어떻게 설정할 수 있습니까?
답변
Robolectric은 프레임 워크 클래스 중 일부를 소위 그림자 클래스로 바꿉니다. 이러한 클래스는 원래 프레임 워크 클래스를 사용하는 코드를 테스트하기 위해 해당 동작을 지정할 수있는 경우가 많습니다.
이 경우, 찾고있는 그림자 클래스는 Calendar에서 사용하는 currentTimeMillis()의 반환 값을 지정하는 데 사용할 수있는 setCurrentTimeMillis()가있는 ShadowSystemClock입니다. 의 라인을 따라
뭔가 :
ShadowSystemClock shadowClock = Robolectric.shadowOf(SystemClock.class);
shadowClock.setCurrentTimeMillis(1424369871446); // 18:17:51 UTC Feb 19 2015
당신을 위해 작동합니다.
편집 : 그들은 지금 정적으로 이제 ShadowSystemClock
의 방법은 직접 액세스 할 수
. 시간을 설정하는 업데이트 방법은 다음과 같습니다이 문제에 인용
ShadowSystemClock.setCurrentTimeMillis(1424369871446); // 18:17:51 UTC Feb 19 2015
-Calls to java.lang.System are not intercepted in Robolectric
위의 코드의 효과가 같은 다른 방법에 분명하다 : 현재로
ShadowSystemClock.currentTimeMillis();
SystemClock.currentThreadTimeMillis();
이제 위와 연결된 문제의 상태가 변경 될 때까지 System.currentTimeMillis()
의 응답을 조롱하는 간단한 방법은 없습니다. 내가 무슨 짓을
Roboeletric 3.0에서 어떻게 사용합니까? –
'ShadowSystemClock.setCurrentTimeMillis (1424369871446);'. 모든 메소드는 정적입니다. –
@Edward @KamranAhmed, 이것은 나를 위해 작동하지 않습니다. 'ShadowSystemClock.setCurrentTimeMillis (1424369871446);을 설정 한 다음'Calendar.getInstance(). getTimeInMillis()'를 호출하면 실시간을 반환합니다. 누구든지 나를 도울 수 있을까? – AinisSK
이었다 다음 : link
가 그럼 난과 같이 오늘 (날짜)를 반환하는 방법을 조롱 :
먼저이 게시물처럼 날짜와 상호 작용을 래핑하는 클래스를 생성 Mockito :
public void setMockDate(String mockDateString) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date mockDate = sdf.parse(mockDateString);
stub(mockDateProvider.getToday()).toReturn(mockDate);
} catch (ParseException parseException) {
fail("Failure: Unable to parse test date string");
}}
그러면 메소드가 반환 할 날짜를 지정할 수 있습니다.
다른 사람들에게 도움이되기를 바랍니다.
- 1. 캘린더 클래스 java에서 시간을 설정할 수 없습니다
- 2. UILocalNotification의 만료 시간을 어떻게 설정할 수 있습니까?
- 3. 사람이 다시 투표 할 수있는 시간을 어떻게 설정할 수 있습니까?
- 4. 클래스가 자체 객체를 반환 할 수 있습니까?
- 5. cocos2d Director가 시간을 반환 할 수 있습니까?
- 6. 배터리/RAM을 남용하지 않고 캘린더 시간을 어떻게 확인할 수 있습니까?
- 7. 캘린더 c와 동일한 캘린더 c2를 설정할 수 있습니까?
- 8. mod_pagespeed - 만료 시간과 캐시 업데이트 시간을 어떻게 설정할 수 있습니까?
- 9. 어떻게 30 초 제한 시간을 설정할 수 있습니까? NSURL
- 10. 파이썬에서 파일의 마지막 수정 시간을 어떻게 설정할 수 있습니까?
- 11. 클래스가 정의 된 후에 다형 식별자를 어떻게 설정할 수 있습니까?
- 12. 어떻게 표시 할 System.Data.SQLite 설정할 수 있습니까?
- 13. (가능한 경우) 어떻게 CGAffineTransformRotate의 지속 시간을 설정할 수 있습니까?
- 14. 스플래시 화면 표시 시간을 어떻게 설정할 수 있습니까?
- 15. 만료되지 않도록 세션 제한 시간을 어떻게 설정할 수 있습니까?
- 16. 커널 공간에서 rtc 시간을 어떻게 설정할 수 있습니까?
- 17. 24 시간 동안 email_token_expiry 시간을 어떻게 설정할 수 있습니까?
- 18. 자바 - PC가 작업을 수행해야하는 시간을 어떻게 설정할 수 있습니까?
- 19. 어떻게 시스템 시간을 오버라이드 할 수 있습니까?
- 20. Python - 어떻게 -1을 반환 할 수 있습니까?
- 21. 웹 사이트에서 상태를 업데이트 할 날짜와 시간을 설정할 수 있습니까?
- 22. 참조를 반환 할 수 있습니까?
- 23. 이 스텁 객체의 반환 값을 어떻게 설정할 수 있습니까?
- 24. 어떻게 mod_rewrite를 설정할 수 있습니까?
- 25. Perl이 호출자에게 어떻게 반환 할 수 있습니까?
- 26. 어떻게 행렬을 반환 할 수 있습니까?
- 27. 어떻게 문자열로 경로를 반환 할 수 있습니까?
- 28. 태그가있는 문자열을 어떻게 반환 할 수 있습니까?
- 29. SQLiteOpenHelper가 SQLiteDatabase를 어떻게 반환 할 수 있습니까?
- 30. 어떻게 장고에서 객체를 반환 할 수 있습니까?
해결 방법을 찾으셨습니까? 우리는 같은 문제를 겪고 있습니다. –