小编gsi*_*011的帖子

Mockito - "通缉但未调用;但是还有其他与此模拟的交互"错误

我正在验证是否使用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)

java junit verify mockito

13
推荐指数
1
解决办法
3万
查看次数

Mockito - 存储由模拟对象方法返回的对象的方法

假设我有一个模拟对象,我不想存根任何方法,但是我想要存根它返回的对象的方法.例如,

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)

那么可能导致问题的原因是什么?

java mockito method-chaining stubbing

12
推荐指数
1
解决办法
2万
查看次数

Maven with Cygwin - 错误:JAVA_HOME未正确定义

我正试图在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)

java cygwin maven

11
推荐指数
3
解决办法
1万
查看次数

在Verilog中断言

我对Verilog完全不熟悉,所以请耐心等待.

我想知道Verilog中是否有断言声明.在我的测试平台中,我希望能够断言模块的输出等于某些值.

例如,

mymodule m(in, out);
assert(out == 1'b1);
Run Code Online (Sandbox Code Playgroud)

谷歌搜索给了我一些链接,但它们要么太复杂,要么似乎不是我想要的.

assert verilog

11
推荐指数
4
解决办法
2万
查看次数

允许使用Google App Engine和Jinja2的<br>代码

在我的网络应用中,用户可以发布博客文章.当我显示博客文章时,不显示换行符,因为我没有用<br>标签替换新行.问题是我在Jinja中启用了autoescaping,因此<br>标签被转义.我不想暂时禁用autoescaping,我想特别允许<br>标签.我该怎么做?

python whitespace escaping jinja2 webapp2

9
推荐指数
1
解决办法
3626
查看次数

为什么使用带有ostringstream的std :: endl会影响输出速度?

我正在计算将文本打印到标准输出的各种方法之间的差异.我正在测试cout,printfostringstream使用\nstd::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)

c++ performance flush stringstream ostream

9
推荐指数
1
解决办法
5136
查看次数

为什么TypedArray应该被回收?

这个答案告诉我,调用recycle()TypedArray 的方法允许它被垃圾收集.我的问题是为什么TypedArray特别需要一个方法来进行垃圾回收?为什么它不能等待像常规对象一样被垃圾收集?

android garbage-collection typedarray

9
推荐指数
1
解决办法
7299
查看次数

解释两个数字的安全平均值

每当我需要为二进制搜索等算法平均两个数字时,我总是这样做:

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)/2Java中的问题并不完全是high + low溢出(它会溢出,因为整数都是有符号的,但所有的位仍然存在,并且没有信息丢失).像这样取平均值的问题是分裂.该部门以签名值运行,因此您的结果将为负数.相反,使用移位将除以2但考虑位而不是符号(有效地将其视为无符号).

c++ java math bit-manipulation integer-overflow

9
推荐指数
2
解决办法
3727
查看次数

为什么SELECT'a'='b'='c'在MYSQL中返回1?

我正在为涉及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'真的?

mysql sql sql-injection

8
推荐指数
1
解决办法
2472
查看次数

在不同文件上使用diff时,Makefile失败

我的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)

并且脚本停止了.我怎样才能让它继续下去?

diff makefile termination

7
推荐指数
2
解决办法
3466
查看次数