Я заметил, что разрешение time.time () отличается от версий Windows 10 Professional и Education.
На машине с Windows 10 Professional разрешение составляет 1 мс. На компьютере с системой Windows 10 разрешение составляет 16 мс.
Я нахожу, что это искусственное ограничение довольно красноречиво (и даже неэтично), особенно если оно не включено в сравнительную документацию Windows, опубликованную Microsoft.
Вы можете использовать Pattern Decorator с интерфейсом Animal
и вашим Lion
экземпляром:
public class EatingDecorator implements Animal {
private Animal target;
private int counter;
public EatingDecorator(Animal target) {
this.target = target;
}
@Override
public void eat() {
target.eat();
counter++;
}
public int getCounter() {
return counter;
}
}
, а затем применить его
Animal lion = new EatingDecorator(new Lion());
lion.eat();
lion.eat();
lion.eat();
System.out.println(((EatingDecorator) lion).getCounter()); // 3
Вы можете создать тестовый модуль с помощью mockito - вы запускаете тест и реализуете следующий код:
Mockito.verify (mock, times (4)). Send ();
Использование прокси может помочь, во многих случаях мы не можем изменить код, но мы можем создать прокси и делать то, что вы хотите.
используйте следующий код:
public class Lion implements Animal {
@Override
public void eat() {
System.out.println("Lion can eat");
}
public static AtomicInteger counts = new AtomicInteger(0);
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Lion.class);
enhancer.setCallback((MethodInterceptor) (obj, method, args1, proxy) -> {
counts.getAndIncrement();
return proxy.invokeSuper(obj, args1);
});
Animal lion = (Lion) enhancer.create();
lion.eat();
lion.eat();
lion.eat();
System.out.println("method called " + counts.get() + " times");
}
}
зависимость от cglib
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.10</version>
</dependency>