Область применения @Mock в Junit 4 в методах @Produces

user966217

Почему имитируемые объекты кажутся заблокированными после создания тестового класса и null в методах @Produced, если имитируют аннотацию @Mock

public class MyTest {

   @Rule
   public MockitoRule rule = MockitoJUnit.rule();

   @Rule
   public WeldInitiator weld = WeldInitiator.from(MyTest.class).build();

   //@Mock <-- this wont work. Will be null in the @Produces methods
   private ClassThatSutInjects sutInject= mock(ClassThatSutInjects.class);

   private NeedsTest sut;

   @Before
   public void setup() {
      sut = weld.select(NeedsTest.class).get();
   }

   @Test
   public void doesThisWork() {
      //Arrange
      //Mockito.when(sutInject.multiply(anyInt()))
      // .thenReturn(3);//this has no effect on the mock returned by @Produces

      //Act
      sut.doThis(1234);

      //Assert

  }

  @Produces
  public ClassThatSutInjects mockThatClass() {
      Mockito.when(sutInject.multiply(anyInt())).thenReturn(100);   //<-- this works
      return sutInject;
  }

}

public class NeedsTest {
   @Inject
   ClassThatSutInjects someClass

   public void doThis(int number) {
      return someClass.multiply(number);
   }

}

Меня озадачивают две вещи, в понимании которых мне хотелось бы помочь:

1) @Mock (аннотированные поля) имеют значение null внутри методов @Producer, но инициализируются, если вместо этого я использую = Mockito.mock (xxx.class). Насколько я понимаю, это связано с тем, когда используется нотация, а не когда применяется @Rule. Будем признательны за более подробную информацию ...

2) Я бы очень хотел, чтобы макет делал разные вещи в разных тестовых примерах, но это кажется невозможным, поскольку методы @Produces «застряли в прошлом», когда mockito.when () не применялся еще. Как можно "устроить" пр. прецедент? Имея один пр. test-case со временем станет не обслуживаемым ... из-за большого количества кода.

РЕДАКТИРОВАТЬ: Я обнаружил, что создание статичных фиктивных объектов позволяет настроить мой фиктивный объект pr. Метод испытания. Я выполнил отладку и заметил, что объект, возвращенный производителем, не был тем же экземпляром, который использовался в jUnit @Test - очевидно, @Produces запущен в другом экземпляре класса MyTest ... все еще не имеет для меня смысла , так что еще: если у кого-то есть знания, поделитесь, пожалуйста.

второй

Как вы уже заметили, производитель запускается на другом экземпляре объекта.

Source (Глава 8.1 Объем метода производителя):

Метод-производитель не наследует область действия bean-компонента, объявляющего метод. Здесь есть два разных bean-компонента : метод-производитель и bean-компонент, который его объявляет. Область действия метода производителя определяет, как часто метод будет вызываться, и жизненный цикл объектов, возвращаемых методом. Область действия bean-компонента, объявляющего метод производителя, определяет жизненный цикл объекта, для которого вызывается метод производителя.

Создание статического поля работает вокруг этого, но на самом деле это не очень хорошее решение.

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

Ответы Junit Mock не возвращаются в случае зацикливания

Junit Mockito NullPointerException для Mock для автоматического подключения на основе конструктора

Тестирование с использованием Junit и Mock put request

Есть ли способ Mock частного вызова метода внутри другого метода в Junit5

@Mock зависимости @Autowired вызывает случайные сбои тестов junit

Проблема миграции с Junit 4 на Junit 5

Миграция с Junit 4 на Junit 5 - тестовые случаи пропускаются

Как реализовать JUnit 4 параметризованные тесты в JUnit 5?

Лучший способ автоматически перенести тесты из JUnit 3 в JUnit 4?

Как исключить продолжительность выполнения из методов, аннотированных аннотациями JUnit 4 до и после

Как запустить тест JUnit 4, управляемый данными с несколькими данными

JUnit 4: как получить имя теста внутри правила?

Тестирование же исключение с использованием нескольких параметров в рамках того же методы испытаний в JUnit 4

Почему я не могу использовать ожидается в JUnit 4

JUnit 4: ожидать одного исключения несколько раз

JUnit 4 - Как игнорировать весь пакет с тестами?

Проверьте код ошибки пользовательского исключения с JUnit 4

JUnit 4: вложенные тесты

Как вы утверждаете, что в тестах JUnit 4 выбрасывается определенное исключение?

Junit 4 Тестирование покрытия

Как динамически создать набор тестов в JUnit 4?

Причина неожиданного поведения с использованием механизма ожидаемых исключений JUnit 4?

Получить имя выполняемого в данный момент теста в JUnit 4

Условно игнорируем тесты в JUnit 4

Как запустить все тесты, принадлежащие к определенной категории в JUnit 4

JUnit 4 сравнить наборы

Можно ли исключить несколько категорий в JUnit 4?

Запустить все тесты в Junit 4

Повторное использование тестовых реализаций в JUnit 4?

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    How to click an array of links in puppeteer?

  3. 3

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  4. 4

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  5. 5

    Нарисуйте диаграмму с помощью highchart.js

  6. 6

    无法通过Vue在传单中加载pixiOverlay

  7. 7

    Отчеты Fabric Debug Craslytic: регистрация, отсутствует идентификатор сборки, применить плагин: io.fabric

  8. 8

    Статус HTTP 403 - ожидаемый токен CSRF не найден

  9. 9

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  10. 10

    ContentDialog.showAsync в универсальном оконном приложении Win 10

  11. 11

    В UICollectionView порядок меняется автоматически

  12. 12

    Merging legends in plotly subplot

  13. 13

    Elasticsearch - Нечеткий поиск не дает предложения

  14. 14

    Bogue étrange datetime.utcnow()

  15. 15

    Объединение таблиц в листе Google - полное соединение

  16. 16

    Single legend for Plotly subplot for line plots created from two data frames in R

  17. 17

    как я могу удалить vue cli 2?

  18. 18

    ViewPager2 мигает / перезагружается при смахивании

  19. 19

    Компилятор не знает о предоставленных методах Trait

  20. 20

    JDBI - В чем разница между @define и @bind в JDBI?

  21. 21

    проблемы с AVG и LIMIT SQL

популярныйтег

файл