JMockit макет конструктора в ожиданиях - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь установить результат при вызове конструктора в блоке Expectations, но вызов конструктора в протестированном коде не возвращает результат, который я устанавливаю. Должен быть другой способ сделать это, приведенный ниже код - моя попытка, и она не работает на assertEquals. Кто-нибудь знает, как это сделать?

Обратите внимание, что я хочу изолировать свой модульный тест от производственного кода, я тестирую SomeMapper, поэтому я хочу смоделировать OutputObject (в моем реальном коде OutputObject является сложным объектомкоторые могут иметь неожиданное поведение при использовании в тесте)

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);
   }
}
...