- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试测试是否以预期顺序调用模拟对象的方法。下面是简化的例子:
@Test
public void test() {
List<String> mockedList = Mockito.mock(List.class);
for (int i = 0; i < 5; i++) {
mockedList.add("a");
mockedList.add("b");
mockedList.add("c");
}
// I want only this to pass.
InOrder inOrder1 = Mockito.inOrder(mockedList);
inOrder1.verify(mockedList).add("a");
inOrder1.verify(mockedList).add("b");
inOrder1.verify(mockedList).add("c");
// I want this to fail.
InOrder inOrder2 = Mockito.inOrder(mockedList);
inOrder2.verify(mockedList).add("c");
inOrder2.verify(mockedList).add("b");
inOrder2.verify(mockedList).add("a");
}
虽然验证顺序(c -> b -> a
)与调用顺序(a -> b -> c
)不同,但这个测试通过了。这是因为 Mockito 验证方法 2 是否调用了方法 1 之后的任何地方,但不是立即调用(即,中间没有调用其他方法)。因为我多次添加元素,所以这是很有可能的。这意味着,Mockito InOrder 传递给 b -> a -> c -> a -> c -> b -> c -> b -> a ...
但我希望它失败,并确保顺序始终是 a -> b -> c -> a -> b -> c -> a -> b -> c ...
更新:正确的验证方法是验证顺序相同的迭代次数(已接受答案的摘要):
for (int i = 0; i < 5; i++) {
inOrder1.verify(mockedList).add("a");
inOrder1.verify(mockedList).add("b");
inOrder1.verify(mockedList).add("c");
}
// fail the test if we missed to verify any other invocations
inOrder1.verifyNoMoreInteractions();
最佳答案
问题是你需要添加
inOrder.verifyNoMoreInteractions();
在你的循环中,你会产生这样的调用
当你检查
inOrder.verify(mockedList).add("b");
inOrder.verify(mockedList).add("c");
inOrder.verify(mockedList).add("a");
它匹配调用(add(b)、add(c)、add(a))。不检查其他调用。
所以我认为你必须有以下选择:1)验证所有调用a,b,c,a,b,c2) 验证你的模拟没有更多的交互发生
顺便说一句,如果您将验证更改为
inOrder.verify(mockedList).add("c");
inOrder.verify(mockedList).add("b");
inOrder.verify(mockedList).add("a");
它将失败,因为它与调用不匹配:-)
关于java - 使用 Mockito.inOrder 验证模拟方法是否以准确的顺序被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51691913/
在一些情况下,能够比较二叉搜索树中的最后一个元素和第一个元素,元素对,将被证明是有用的。 例如:找到 2 个总和为给定数字的元素。 (最快的方法是尝试将最小和最大的数字相加,然后根据与给定数字的结果总
顺序、前序和后序名称背后的逻辑是什么?他们为什么这么叫? 为了。为什么是“在”这个词,“在”是什么? 预购。 “前”,意思是“上一个”,但前一个是什么? 下单。 “后”的意思是“之后”,但是之后呢?
我试图编写一段简单的代码来通过 inorder 遍历来遍历二叉搜索树。我能够完美地纠正插入代码,因为调试器显示的树与我想要的一模一样。但是我的递归遍历没有给出正确的结果。这是我的调试器的屏幕截图: 左
最近,我的问题被标记为重复的,比如this,即使没有。所以,让我从下面开始,然后我将解释我的问题。 为什么这个问题不是重复的? 我不想问如何创建一个二叉树时,顺序和前序遍历给出。我要求证明,inord
我的任务是实现一个函数,该函数迭代 bin 树并按顺序返回其所有值的数组。代码如下: interface BinTree { root: number; left?: BinTree; right?:
很简单的问题: 如何递归地创建使用此构造函数的二叉搜索树数组(按顺序): public class OrderedSet> { private class TreeNode { pri
下面提到的示例树可能的总遍历组合是 DLR, LDR, LRD, DRL, RDL, RLD 示例树 [ D=root , L= LeftNode , R= RightNode ] D / \
如何使用回调模式和 Promises 实现“inOrder”。 var logOne = setTimeout(function() { console.log("one!"); },
我写了这段代码- #include #include struct nd{ int data; struct nd *left; struct nd *right; }; struc
我必须编写一个函数,它接受一棵树作为参数,并将其作为按顺序排列的字符串返回。 这就是我得到的。 public static String concatInOrder( StringTreeNode t
我目前正在大学学习数据结构类(class),我们正在学习使用链表的二叉搜索树。我们已经递归地检查了 inOrder 方法,但我想尝试迭代地执行该方法。经过一些研究,我意识到我必须在遍历树时使用堆栈。我
我正在为家庭作业实现一个 InOrder 迭代器,这意味着迭代器是这样前进的: 拜访左孩 访问节点 拜访正确的 child 还有这些复杂性限制:遍历整棵树的运行时复杂度应为 o(n),其中 n 是树中
我在打印二叉树的有序遍历时遇到一些问题。即使在树中插入许多项目后,它也只打印 3 个项目。 public class BinaryTree { private TreeNode root;
我正在尝试编写一个单元测试来检查方法是否按顺序调用。为此,我使用 Mockito 的 inOrder.verify() ,如下所示: @Test public void shouldExecuteAl
尝试将 InOrder 遍历的输出返回到 Java JLabel。我能够返回 ArrayList 的内容,但需要输出为不带 [,,,] 的字符串。我确信这是一个简单的解决方案,但我已经被困了一段时间尝
我正在测试使用 Architecture Components 中的 Room 库生成的 DAO 类。我想检查连接多个表的查询返回的 LiveData 是否会在数据更改时更新。 我一开始使用 InOr
我正在尝试测试是否以预期顺序调用模拟对象的方法。下面是简化的例子: @Test public void test() { List mockedList = Mockito.mock(List
我创建了一个二叉搜索树,我可以添加和删除它,但是当我尝试使用 getInorderIterator 方法并打印树时,它会打印“TreePackage.BinaryTree$InorderIterato
我想测试模拟上的方法是否以正确的顺序、正确的参数以及与相应参数相关的正确的方法调用数量进行调用。 假设我想测试 List.add 被调用,如下所示: List listMock = Mockito.m
就在我坐下来为 morris 中序遍历编写代码之前,我尝试了这个例子,但对于它在这种特殊情况下的工作方式有点困惑: 80 / \ 60 100
我是一名优秀的程序员,十分优秀!