我们可以使用时钟来模拟调用,比如System.currentTimeMillis(),使用Clock.millis()并注入一个模拟时钟实现。
是否有类似的方法可以轻松地模拟System.nanoTime()?
发布于 2022-06-20 09:49:27
使用您自己的封装
interface NanoTimer {
long nanoTime();
static NanoTimer system() {
return System::nanoTime;
}
}这样,您就可以轻松地编写自己的模拟程序。
或者,除了秒表之外,我看不到任何用例,所以我想您可能想看看番石榴的Stopwatch
发布于 2022-06-20 09:48:43
您可以使用Google的Ticker类来实现这一点。
或者,如果您只是想正确地度量时间,您可以使用Stopwatch作为额外的功能和更好的API,它的构造函数是一个Ticker实例。
如果您发现其中的任何其他实用程序都很有用,那么guava-testlib中甚至还有一个guava-testlib。否则,写假币显然是很容易的。
发布于 2022-11-16 05:12:42
您可以在单元测试期间使用接口进行依赖项注入:
public class YourClass {
private static TimeSupplier timeSupplier = System::nanoTime;
@VisibleForTesting
public static void setTimeSupplier(TimeSupplier timeSupplier) {
YourClass.timeSupplier = timeSupplier;
}
@FunctionalInterface
interface TimeSupplier {
long nanoTime();
}
// Just use timeSupplier.nanoTime() instead of the static nanoTime calls
}然后,您可以简单地用一个常量(例如,Mockito)对超时进行存根:
YourClass.TimeSupplier timeSupplier = mock(YourClass.TimeSupplier.class);
when(timeSupplier.nanoTime()).thenReturn(20221116L);
YourClass.setTimeSupplier(timeSupplier);https://stackoverflow.com/questions/72684249
复制相似问题