5

我正在对执行一些序列化操作的方法进行单元测试。我打算模拟序列化逻辑。代码如下:

ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));

我创建了以下模拟对象:

@Mocked FileInputStream mockFIS;

@Mocked BufferedInputStream mockBIS;

@Mocked ObjectInputStream mockOIS;

我已经设置了一个NonStrictExpectations()我希望上面的构造函数调用的块。

关于如何实现这一目标的任何想法?

4

1 回答 1

10

您可以为给定的一组交互指定一组完整的期望。使用JMockit进行基于行为的测试

对 doSomething() 方法的一个可能的测试可以测试在任意次数的成功迭代之后抛出 SomeCheckedException 的情况。假设我们想要(无论出于何种原因)为这两个类之间的交互记录一组完整的期望,我们可以编写下面的测试:

@Test
public void doSomethingHandlesSomeCheckedException() throws Exception
{
  new Expectations() {
     DependencyAbc abc;

     {
        new DependencyAbc(); // expect constructor

        abc.intReturningMethod(); result = 3;

        abc.stringReturningMethod();
        returns("str1", "str2");
        result = new SomeCheckedException();
     }
  };

  new UnitUnderTest().doSomething();
}
于 2011-11-09T12:42:12.843 回答