我试图用Mockito取代JMock(1.10.17).我已经成功完成了一些单元测试,但现在我想使用超时功能
verify(publisher, timeout(5000)).notifySubscribers(any(BecameMasterMessage.class));
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
java.lang.VerifyError: (class: org/mockito/internal/verification/VerificationOverTimeImpl, method: verify signature: (Lorg/mockito/internal/verification/api/VerificationData;)V) Incompatible argument to function
at org.mockito.verification.Timeout.<init>(Timeout.java:32)
at org.mockito.verification.Timeout.<init>(Timeout.java:25)
at org.mockito.Mockito.timeout(Mockito.java:2164)
Run Code Online (Sandbox Code Playgroud)
问题发生在IntelliJ和Maven中.类路径上只有一个版本的Mockito.在类路径上还有JMock 2.5.1,我无法删除,因为此时99%的单元测试仍然使用JMock.我不知道这与它有什么关系.
更新:我尝试使用JMock 2.6.0和Hamcrest 1.3,但结果是一样的.
更新2:
这有效:
Thread.sleep( 5000 );
verify( m_publisher ).notifySubscribers( any( BecameMasterMessage.class ) );
Run Code Online (Sandbox Code Playgroud)
而这不是:
verify(publisher, timeout(5000)).notifySubscribers(any(BecameMasterMessage.class));
Run Code Online (Sandbox Code Playgroud)
更新3:我做了一个小测试项目,它有完全相同的问题:请参阅https://github.com/wimdeblauwe/mockito-verify-problem并从IntelliJ或Maven运行它.
我正在编写自己的Java 8 Stream实现,并希望从原始java.util.stream.Stream
接口继承Javadoc .但是我无法让它发挥作用.生成的Javadoc仅显示我的文档,但不显示扩展Stream接口的文档.
因此,例如,此方法的javadoc仅包含文本"一些附加信息",但不包含Stream
界面中的文档.
/**
* {@inheritDoc}
* Some additional information.
*/
@Override
public Stream<T> filter(Predicate<? super T> predicate) {
// ... my stream implementation...
}
Run Code Online (Sandbox Code Playgroud)
这是我对maven-javadoc-plugin的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<links>
<link>http://docs.oracle.com/javase/8/docs/api/</link>
</links>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我是否会错过这种配置?我设置source
和target
1.8的Maven的编译器插件.因此,根据maven-javadoc-plugin的文档,应该自动检测java API.
Stack Overflow上也有类似的问题,但那里的答案似乎没有用.
我觉得困惑与这些表达while(n&3)==0
和n>>=2
.我不确定这个条件何时执行while((n&3)==0)
以及会发生什么n>>=2
public int numSquares(int n) {
while ((n & 3) == 0) //n % 4 == 0
n >>= 2;
if ((n & 7) == 7) return 4; //n% 8 == 7
if(is_square(n)) return 1;
int sqrt_n = (int) Math.sqrt(n);
for (int i = 1; i<= sqrt_n; i++){
if (is_square(n-i*i)) return 2;
}
return 3;
}
public boolean is_square(int n){
int temp = (int) Math.sqrt(n);
return temp * temp == n;
}
Run Code Online (Sandbox Code Playgroud)