我正在验证是否使用Mockito调用了一个函数,但是Mockito告诉我,我正在验证的函数从未被调用,并且其他函数被调用.但在我看来,我正在调用正确的功能......
这是我得到的错误的堆栈跟踪:
Wanted but not invoked:
relationshipAutoIndexer.getAutoIndex();
-> at org.whispercomm.manes.server.graph.DataServiceImplTest.testInitIndices(DataServiceImplTest.java:117)
However, there were other interactions with this mock:
-> at org.whispercomm.manes.server.graph.DataServiceImpl.updateIndexProperties(DataServiceImpl.java:136)
-> at org.whispercomm.manes.server.graph.DataServiceImpl.updateIndexProperties(DataServiceImpl.java:144)
-> at org.whispercomm.manes.server.graph.DataServiceImpl.updateIndexProperties(DataServiceImpl.java:148)
-> at org.whispercomm.manes.server.graph.DataServiceImpl.updateIndexProperties(DataServiceImpl.java:149)
-> at org.whispercomm.manes.server.graph.DataServiceImpl.initIndices(DataServiceImpl.java:121)
at org.whispercomm.manes.server.graph.DataServiceImplTest.testInitIndices(DataServiceImplTest.java:117)
Run Code Online (Sandbox Code Playgroud)
它出现在
verify(relAutoIndexer).getAutoIndex();
Run Code Online (Sandbox Code Playgroud)
下面显示的测试类代码.
这是我的代码(我倾向于意外地将事情遗漏.请问我任何你认为我缺少的代码,我会添加它):
public DataServiceImpl(GraphDatabaseService graphDb) {
super();
this.graphDb = graphDb;
unarchivedParent = new UnarchivedParent(graphDb.createNode());
archivedParent = new ArchivedParent(graphDb.createNode());
packetParent = new PacketParent(graphDb.createNode());
userParent = new UserParent(graphDb.createNode());
this.initIndices();
}
/**
* Initializes the node and relationship indexes.
*
* Updates the set of indexed …
Run Code Online (Sandbox Code Playgroud) 假设我有一个模拟对象,我不想存根任何方法,但是我想要存根它返回的对象的方法.例如,
when(mockObject.method1()).thenReturn(returnValue)
Run Code Online (Sandbox Code Playgroud)
它是如何正常完成的,但我正在寻找,
when(mockObject.method1().method2()).thenReturn(returnValue)
Run Code Online (Sandbox Code Playgroud)
那可能吗?如果我这样做,我会得到一个NullPointerException.目前我有第一个返回模拟对象的方法,然后使用返回的模拟对象,存根第二个方法.但是,这些临时模拟对象对我来说是无用的,并且在将许多方法链接在一起之后,会导致很多无用的模拟对象.
编辑:实际上,链接可能有效,但我的对象正在引起NPE.这段代码(第一行)导致NPE:
when(graphDb.index().getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);
Run Code Online (Sandbox Code Playgroud)
但是这段代码有效:
IndexManager indexManager = mock(IndexManager.class);
when(graphDb.index()).thenReturn(indexManager);
when(indexManager.getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);
Run Code Online (Sandbox Code Playgroud)
所以链接不适用于getNodeAutoIndexer(),它返回一个AutoIndexer对象,同时它对getRelationshipAutoIndexer()有效,返回一个RelationshipAutoIndexer.两个返回值都被模拟如下:
nodeAutoIndexer = (AutoIndexer<Node>) mock(AutoIndexer.class);
relAutoIndexer = mock(RelationshipAutoIndexer.class);
Run Code Online (Sandbox Code Playgroud)
那么可能导致问题的原因是什么?
我正试图在cygwin上运行Maven.我已经在路径中添加了maven,我的Java主页看起来像这样:
$ echo $JAVA_HOME
/cygdrive/c/Program Files/Java/jdk1.6.0
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试跑步时mvn --version
,我得到了这个:
Error: JAVA_HOME is not defined correctly.
We cannot execute /cygdrive/c/Program Files/Java/jdk1.7.0_01/bin/java
Run Code Online (Sandbox Code Playgroud)
知道为什么它不起作用吗?Java -version工作正常,所以它不是java的问题.我也尝试过jdk1.6.0.
跑步which java
给,
$ which java
/cygdrive/c/windows/system32/java
Run Code Online (Sandbox Code Playgroud)
并java -version
给,
$ java -version
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) Client VM (build 21.1-b02, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud) 我对Verilog完全不熟悉,所以请耐心等待.
我想知道Verilog中是否有断言声明.在我的测试平台中,我希望能够断言模块的输出等于某些值.
例如,
mymodule m(in, out);
assert(out == 1'b1);
Run Code Online (Sandbox Code Playgroud)
谷歌搜索给了我一些链接,但它们要么太复杂,要么似乎不是我想要的.
在我的网络应用中,用户可以发布博客文章.当我显示博客文章时,不显示换行符,因为我没有用<br>
标签替换新行.问题是我在Jinja中启用了autoescaping,因此<br>
标签被转义.我不想暂时禁用autoescaping,我想特别允许<br>
标签.我该怎么做?
我正在计算将文本打印到标准输出的各种方法之间的差异.我正在测试cout
,printf
并ostringstream
使用\n
和std::endl
.我希望std::endl
能有所作为cout
(并且确实如此),但我没想到它会减慢输出速度ostringstream
.我以为使用std::endl
只会写一个\n
流,它仍然只会被刷新一次.这里发生了什么?这是我的所有代码:
// cout.cpp
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 10000000; i++) {
cout << "Hello World!\n";
}
return 0;
}
// printf.cpp
#include <stdio.h>
int main() {
for (int i = 0; i < 10000000; i++) {
printf("Hello World!\n");
}
return 0;
}
// stream.cpp
#include <iostream>
#include <sstream>
using namespace …
Run Code Online (Sandbox Code Playgroud) 每当我需要为二进制搜索等算法平均两个数字时,我总是这样做:
int mid = low + ((high - low) / 2);
Run Code Online (Sandbox Code Playgroud)
我最近在这篇文章中看到了另一种方法,但我不明白.它说你可以用Java做到这一点:
int mid = (low + high) >>> 1;
Run Code Online (Sandbox Code Playgroud)
或者在C++中:
int mid = ((unsigned int)low + (unsigned int)high)) >> 1;
Run Code Online (Sandbox Code Playgroud)
C++版本实质上使两个操作数都无符号,因此执行移位会导致算术移位而不是有符号移位.我理解这两段代码正在做什么,但是这如何解决溢出问题呢?我认为整个问题是中间值high + low
可能溢出?
编辑:
哦,呃.所有答案都没有完全回答我的问题,但是@John Zeringue的答案让它点击了.我会试着在这里解释一下.
(high + low)/2
Java中的问题并不完全是high + low
溢出(它会溢出,因为整数都是有符号的,但所有的位仍然存在,并且没有信息丢失).像这样取平均值的问题是分裂.该部门以签名值运行,因此您的结果将为负数.相反,使用移位将除以2但考虑位而不是符号(有效地将其视为无符号).
我正在为涉及SQL注入的安全类做一些功课.我发现我可以比典型的' OR '1'=1
例子做更短的SQL注入.相反,我可以做到'='
.输入这个是在典型登录框的密码字段中给出一个SQL查询,如下所示:
SELECT * FROM Users WHERE username='user' AND password=''='';
Run Code Online (Sandbox Code Playgroud)
事实证明,password=''=''
求值1
,允许SQL注入工作.
做了一些测试后,我看到如果我测试一个字符串是否等于0,它返回1:
SELECT 0='a';
Run Code Online (Sandbox Code Playgroud)
所以在我的例子中,password=''
将评估为0并0=''
最终评估为1.
我的测试向我展示了这是如何发生的,但我想知道为什么会发生这种情况(即为什么是0='a'
真的?
我的C++项目的makefile的一部分使用diff命令来比较最近构建的代码输出的两个文件.问题是如果文件不同,脚本就不会失败并且应该继续.有更多的文件需要比较,我需要在构建脚本结束之前看到它们.例如,像这样的东西,
diff: *
diff $(TEST)/T4.board $(TEST)/T4.board
diff $(TEST)/T4.board $(TEST)/sample.board
Run Code Online (Sandbox Code Playgroud)
第一行没有问题,因为文件是相同的.第二行比较不同的文件,一旦显示差异,我明白了
Makefile:102: recipe for target `diff' failed
make: *** [diff] Error 1
Run Code Online (Sandbox Code Playgroud)
并且脚本停止了.我怎样才能让它继续下去?