Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 预期中的JMockit模拟构造函数_Java_Constructor_Mocking_Jmockit_Expectations - Fatal编程技术网

Java 预期中的JMockit模拟构造函数

Java 预期中的JMockit模拟构造函数,java,constructor,mocking,jmockit,expectations,Java,Constructor,Mocking,Jmockit,Expectations,我试图在Expectations块中设置构造函数调用的结果,但测试代码中的构造函数调用不会返回我设置的结果。必须有不同的方法来实现这一点,下面的代码是我的尝试,并且在assertEquals上失败。有人知道怎么做吗 请注意,我想将单元测试与生产代码隔离,我正在测试SomeMapper,因此我想模拟OutputObject(在我的真实代码中,OutputObject是一个复杂的对象,在测试中使用时可能会有意外的行为) 这次考试没有什么可嘲弄的。只需在测试中实例化一个InputObject,在调用m

我试图在Expectations块中设置构造函数调用的结果,但测试代码中的构造函数调用不会返回我设置的结果。必须有不同的方法来实现这一点,下面的代码是我的尝试,并且在assertEquals上失败。有人知道怎么做吗

请注意,我想将单元测试与生产代码隔离,我正在测试SomeMapper,因此我想模拟OutputObject(在我的真实代码中,OutputObject是一个复杂的对象,在测试中使用时可能会有意外的行为)


这次考试没有什么可嘲弄的。只需在测试中实例化一个
InputObject
,在调用
map
时传递它,然后验证返回的
OutputObject
@Rogério您的意思是只断言OutputObject属性的值?我发布的代码就是一个例子来说明这个问题,在我的“真实”代码中,OutputObject是一个复杂的类,需要大量的代码来实例化,所以我想模拟它并验证构造函数调用。我可能还需要编写一个验证块,在其中我想验证是否调用了某些setter方法。只需在测试中实例化一个
InputObject
,在调用
map
时传递它,然后验证返回的
OutputObject
@Rogério您的意思是只断言OutputObject属性的值?我发布的代码就是一个例子来说明这个问题,在我的“真实”代码中,OutputObject是一个复杂的类,需要大量的代码来实例化,所以我想模拟它并验证构造函数调用。我可能还需要编写一个验证块,在该块中我希望验证是否调用了某些setter方法。
public class SomeMapperTest
{
   // "production code"
   public class InputObject
   {
      private long one, two;
      private String name;

      public long getOne()
      {
         return one;
      }

      public long getTwo()
      {
         return two;
      }

      public String getName()
      {
         return name;
      }
   }


   public class OutputObject
   {
      public OutputObject(String name, MyObject myObject1, MyObject myObject2)
      {
      }
   }


   public class MyObject
   {
      public MyObject(long l)
      {
      }
   }


   public class SomeMapper
   {
      public OutputObject map(InputObject input)
      {
         return new OutputObject(input.getName(), new MyObject(input.getOne()), new MyObject(input.getTwo()));
      }
   }
   // end "production code"

   // test code begins here...

   //@Tested
   private SomeMapper someMapper = new SomeMapper();


   @Test
   public void testMap(@Mocked InputObject input, @Mocked MyObject myObject1, @Mocked MyObject myObject2, @Mocked OutputObject expectedResult)
   {
      final String NAME = "name";
      final long ONE = 1L;
      final long TWO = 2L;

      new Expectations()
      {{
         input.getName();
         result = NAME;
         input.getOne();
         result = ONE;
         input.getTwo();
         result = TWO;

         new MyObject(ONE);
         result = myObject1;

         new MyObject(TWO);
         result = myObject2;

         new OutputObject(NAME, myObject1, myObject2);
         result = expectedResult;
      }};

      OutputObject result = someMapper.map(input);
      assertEquals("Not same!", expectedResult, result);
   }
}