java - 如何开始测试(jMock)

标签 java unit-testing testing mocking jmock

我正在努力学习如何编写测试。我也在学习 Java,有人告诉我应该学习/使用/练习 jMock,我在网上找到了一些有助于某些扩展的文章,例如:

http://www.theserverside.com/news/1365050/Using-JMock-in-Test-Driven-Development

http://jeantessier.com/SoftwareEngineering/Mocking.html#jMock

我发现的大多数文章都是关于测试驱动开发的,先写测试再写代码让测试通过。我现在不是在寻找那个,我正在尝试使用 jMock 为已经存在的代码编写测试。

official documentation至少可以说是模糊的,对我来说太难了。有没有人有更好的方法来学习这个。好书/链接/教程会对我有很大帮助。谢谢

编辑 - 更具体的问题:

http://jeantessier.com/SoftwareEngineering/Mocking.html#jMock - 来自这篇文章

试过这个来模拟这个简单的类:

import java.util.Map;
    public class Cache {
        private Map<Integer, String> underlyingStorage;
        public Cache(Map<Integer, String> underlyingStorage) {
            this.underlyingStorage = underlyingStorage;
        }
        public String get(int key) {
            return underlyingStorage.get(key);
        }
        public void add(int key, String value) {
            underlyingStorage.put(key, value);
        }
        public void remove(int key) {
            underlyingStorage.remove(key);
        }
        public int size() {
            return underlyingStorage.size();
        }
        public void clear() {
            underlyingStorage.clear();
        }
    }

这是我尝试创建测试/模拟的方式:

public class CacheTest extends TestCase {

    private Mockery context;
    private Map mockMap;
    private Cache cache;

    @Override
    @Before
    public void setUp() {
        context = new Mockery() {
            {
                setImposteriser(ClassImposteriser.INSTANCE);
            }
        };

        mockMap = context.mock(Map.class);
        cache = new Cache(mockMap);
    }

    public void testCache() {
        context.checking(new Expectations() {{
            atLeast(1).of(mockMap).size(); 
            will(returnValue(int.class));
        }});

    }
}

它通过了测试并且基本上什么都不做,我想要的是创建一个 map 并检查它的大小,你知道工作一些变化试图捕获这个。通过例子更好地理解,我还能在这里测试什么或任何其他练习会对我有很大帮助。发送

最佳答案

这是一个关于使用 JUnit 和 EasyMock(我个人认为比 JMock 更容易使用的模拟库)的教程:http://www.michaelminella.com/testing/unit-testing-with-junit-and-easymock.html

即使您 100% 致力于使用 JMock,两者之间的概念是相同的,这应该有助于您更好地理解它们。

模拟的目的是当你测试类A时,它依赖于BC,你对A的测试 使用 BC 的模拟版本来指定它们的确切行为,而不是使用 B 的真实实现code>C 在你的 A 测试中。否则,您不仅在测试 A 的单个单元,您也在隐式测试 BC

关于java - 如何开始测试(jMock),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2905157/

相关文章:

java - 如何避免 Selenium 中的 "StaleElementReferenceException"?

unit-testing - XCTest 失败,出现异常 'Non-UI clients cannont be autopaused'

测试代码生成器优化

android - 我应该如何测试包含 ListFragment 的 Android Activity 的功能?

c# - 我应该如何对使用 Entity Framework 实现的存储库方法进行单元测试?

json - 测试API请求是否正常工作

Java 2D 着色/填充

java - 连续循环直到满足条件

java - 嵌入式 neo4j webadmin 不工作

java - 模拟与正在测试的类不同的类函数