- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始在我的测试中使用模拟对象,但我对它们仍然非常缺乏经验,并且不确定在某些情况下如何使用它们。目前我正在为如何模拟方法间依赖性(调用方法 A 对方法 B 的结果有影响)而苦苦挣扎,以及它是否应该被模拟(在使用模拟框架的意义上)?
以 Java 迭代器为例?模拟 next() 调用以返回正确的值很容易,但是我如何模拟 hasNext(),这取决于 next() 被调用了多少次?目前我正在使用 List.Iterator,因为我找不到正确模拟一个的方法。
Martin Fowler 对 mock 和 stub 的区分是否在这里发挥作用?我应该编写自己的 IteratorMock 吗?
还要考虑以下示例。要测试的方法调用 mockObject.setX() 和后来的 mockObject.getX()。有什么方法可以创建这样一个模拟(无需编写自己的模拟),它允许 getX 的返回值取决于传递给 setX 的值吗?
最佳答案
在一般情况下,我会遵循上述 djna 的建议并为这两种方法设置期望值。但是对于给出的示例,我可能不会使用模拟,而是使用 API 创建一个包含我想要的数据的集合,并从中检索迭代器。 (Arrays.asList(...).iterator()
)。
编辑:回复:设置/获取你还用这个对象做什么?如果它是一个值对象(仅获取/设置),我不会 mock 它。付出再多的努力也无济于事。如果不是,则使用 easyMock:
import org.apache.commons.lang.mutable.MutableInt;
import org.easymock.IAnswer;
import org.junit.Test;
import static org.easymock.EasyMock.*;
public class TestSet {
@Test
public void testSetGet() {
final MutableInt value = new MutableInt();
GetSetId id = createMock(GetSetId.class);
id.setID(anyInt());
expectLastCall().andAnswer(new IAnswer<Object>() {
@Override
public Object answer() throws Throwable {
Object[] arguments = getCurrentArguments();
value.setValue((Integer) arguments[0]);
return null;
}
});
expect(id.getID()).andAnswer(new IAnswer<Integer>() {
@Override
public Integer answer() throws Throwable {
return value.toInteger();
}
});
replay(id);
id.setID((int) (Math.random() * 100.0));
System.out.println(id.getID());
verify(id);
}
}
interface GetSetId {
public int getID();
public void setID(int id);
}
关于java - 模拟方法间依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1587193/
根据 Android docs ,activity生命周期如下: onCreate() onStart() onResume() onPause() onStop() onDestroy() 问题是,
我有一门类(class)有很多专栏,但这个问题只需要其中三个: ---------------------------------------- | start_date | start_time
给定在同一个 Tomcat 6 上运行的两个 Web 应用程序。如果您从一个应用程序到另一个应用程序进行 http 调用,Tomcat 是否会“短路”此调用,或者它会在调用之前一直在 interweb
我是一名优秀的程序员,十分优秀!