Как правильно использовать `expectAsync2` при написании юнит-теста dart?

Я пробовал этот метод expectAsync2, поэтому возник вопрос: Почему асинхронный тест пройден, но отображаются некоторые сообщения об ошибках?

Но, кажется, я не использовал его правильно. Есть ли хороший пример expectAsync2?


person Freewind    schedule 30.01.2014    source источник


Ответы (2)


В указанном вопросе expectAsync просто использовался для защиты асинхронного вызова, чтобы тест не заканчивался до завершения вызова new Timer(...).

Вы можете дополнительно указать, как часто (мин/макс) должен вызываться метод, чтобы выполнить тест. Если ваша протестированная функциональность вызывает метод с более чем одним параметром, вы используете `expectAsync2)

Ошибка в указанном вами вопросе заключалась в том, что ваш звонок expectAsyncX тоже был отложен. Вызов expectAsyncX должен быть сделан до того, как будет вызвана асинхронная функциональность, чтобы зарегистрировать, какой метод должен быть вызван.

library x;

import 'dart:async';
import 'package:unittest/unittest.dart';

class SubjectUnderTest {
  int i = 0;
  doSomething(x, y) {
    i++;
    print('$x, $y');
  }
}

void main(List<String> args) {

  test('async test, check a function with 2 parameters', () {
    var sut = new SubjectUnderTest();
    var fun = expectAsync2(sut.doSomething, count: 2, max: 2, id: 'check doSomething');

    new Timer(new Duration(milliseconds:200), () {
        fun(1,2);
        expect(sut.i, greaterThan(0));
    });

    new Timer(new Duration(milliseconds:100), () {
        fun(3,4);
        expect(sut.i, greaterThan(0));
    });

  });
}

Вы можете проверить, что произойдет, если вы установите count и max на 3.

person Günter Zöchbauer    schedule 30.01.2014
comment
Спасибо, а где я могу написать операторы expect()? - person Freewind; 30.01.2014
comment
Это зависит от того, что вы хотите ожидать ;-) - person Günter Zöchbauer; 30.01.2014
comment
Я немного расширил свой ответ. - person Günter Zöchbauer; 30.01.2014
comment
Я знаю вашу идею, спасибо! Я отредактирую ваш ответ, чтобы сделать его более понятным :) - person Freewind; 30.01.2014
comment
Вы отредактировали, и это только то, что я хочу знать :) - person Freewind; 30.01.2014
comment
Нашел ошибки в коде, исправил - person Freewind; 31.01.2014

Вы можете ознакомиться с разделом Асинхронные тесты статья Модульное тестирование с помощью Dart.

person Alexandre Ardhuin    schedule 30.01.2014
comment
Я читал эту статью, когда задавал этот вопрос. Эта статья не дала мне достаточно информации, я не знаю, что не так с моим кодом в соответствующем вопросе. - person Freewind; 30.01.2014