JMockit 返回集合

发布于 2024-09-04 05:08:06 字数 634 浏览 6 评论 0原文

我有以下代码:

public void someMethod() {
     Set<Foo> fooSet = bar.getFoos();

     for(Foo foo: fooSet) {
         foo.doSomething();
     }
}

我想使用 JMockit 测试它,但不确定如何返回特定类型和大小的集合。

当尝试将 foo 添加到 foo 集合时,我的代码的以下测试会引发哈希码的空指针异常。

@Test
public void someTestMethod()
{
     new Expectations()
     {
         @Mocked Bar bar;
         @Mocked Foo foo;


         Set<Foo> foos = new HashSet<Foo>();
         foos.add(foo);

         bar.getFoos(); returns(foos);
         foo.doSomething();
     };

     new SomeClass().someMethod();
}

这应该怎么做呢?

I have the following code:

public void someMethod() {
     Set<Foo> fooSet = bar.getFoos();

     for(Foo foo: fooSet) {
         foo.doSomething();
     }
}

and I want to test this using JMockit but am unsure how to get to return a collection of a certain type and size.

The following test for my code throws a null pointer exception for hashcode when trying to add foo to the set of foos.

@Test
public void someTestMethod()
{
     new Expectations()
     {
         @Mocked Bar bar;
         @Mocked Foo foo;


         Set<Foo> foos = new HashSet<Foo>();
         foos.add(foo);

         bar.getFoos(); returns(foos);
         foo.doSomething();
     };

     new SomeClass().someMethod();
}

How should this be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人的夜不怕黑 2024-09-11 05:08:06

我不太确定如何回答你的问题,因为我不明白你要测试什么,但我相信你想要这样的东西:

@Test
public void someTestMethod(@Mocked(methods="getFoos")final Bar mockedBar
                           @Mocked(methods="doSomething")final Foo mockedFoo {

   final Set<Foo> foos = new HashSet<Foo>();
   foos.add(new Foo()); 

   new Expectations() {
      {
         mockedBar.getFoos(); returns(foos);
         mockedFoo.doSomething();
      }
   };

   new SomeClass().someMethod();
}

使用这个,JMockit 将模拟对 getFoos 的调用并返回设置foos。如果您查看我传入的参数,就会发现我正在对 Bar 和 Foo 类进行部分模拟(我只是模拟对 getFoos 和 doSomething 方法的调用)。我还注意到您在 new Expectations 块中缺少一组大括号,因此这肯定会给您带来一些问题。您必须记住的另一问题是,如果您在 Set foos 中放入多个对象,则使用 E​​xpectations 而不是 NonStrictExpectations 会导致错误,因为它只期望对 进行一次调用做某事。如果您创建一个测试用例,其中 foos 包含多个对象,您可以使用 NonStrictExpectations 或使用 minTimes 和 maxTimes 来指定调用计数约束

I'm not exactly sure how to answer your question because I don't understand what you are trying to test, but I believe you want something like this:

@Test
public void someTestMethod(@Mocked(methods="getFoos")final Bar mockedBar
                           @Mocked(methods="doSomething")final Foo mockedFoo {

   final Set<Foo> foos = new HashSet<Foo>();
   foos.add(new Foo()); 

   new Expectations() {
      {
         mockedBar.getFoos(); returns(foos);
         mockedFoo.doSomething();
      }
   };

   new SomeClass().someMethod();
}

Using this, JMockit will mock the call to getFoos and return the Set foos. If you look at the parameters I am passing in, I am doing a partial mock of the Bar and Foo classes (I am only mocking the calls to the getFoos and doSomething method). I also noticed you are missing a set of braces in your new Expectations block, so that could definitely cause you some problems. One other issue you have to keep in mind is that using Expectations as opposed to NonStrictExpectations will cause an error if you put more than one object in the Set foos because it is only expecting one call to doSomething. If you make a test case where foos has more than one object in it you could either use NonStrictExpectations or use the minTimes and maxTimes to specify invocation count constraints

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文