2

次のコードを検討してください。

  group('Tweets: ', () {
    test('Create tweets', () {
      var tweets = new Tweets();
      expect(tweets, isNull);  // intentionally wrong!    
    });

    test('Add', () {
      var tweets = new Tweets();
      expect(tweets, isNotNull);      
    });

  });

次の良い結果が得られます。

dart --enable-checked-mode TwitterSearchTest.dart

unittest-suite-wait-for-done
FAIL: Tweets:  Create tweets
  Expected: null
       but: was <Instance of 'Tweets'>.

  #0      DefaultFailureHandler.fail (package:unittest/src/expect.dart:86:5)
  #1      DefaultFailureHandler.failMatch (package:unittest/src/expect.dart:90:9)
  #2      expect (package:unittest/src/expect.dart:55:29)
  #3      main.<anonymous closure>.<anonymous closure> (file:///C:/Users/John/tmp/Dart/TwitterSearchTest/TwitterSearchTest.dart:8:13)
  #4      TestCase.run (package:unittest/src/test_case.dart:83:11)
  #5      _nextBatch._nextBatch.<anonymous closure> (package:unittest/unittest.dart:807:19)
  #6      guardAsync (package:unittest/unittest.dart:766:19)

PASS: Tweets:  Add

1 PASSED, 1 FAILED, 0 ERRORS
Unhandled exception:
Exception: Some tests failed.
#0      Configuration.onDone (package:unittest/src/config.dart:130:7)
#1      _completeTests (package:unittest/unittest.dart:835:17)
#2      _nextBatch._nextBatch (package:unittest/unittest.dart:818:17)
#3      runTests.runTests.<anonymous closure> (package:unittest/unittest.dart:755:16)
#4      _defer.<anonymous closure> (package:unittest/unittest.dart:712:13)
#5      _ReceivePortImpl._handleMessage (dart:isolate-patch:37:92)

私の質問:

  • 結果からコール スタックを取り除くにはどうすればよいですか?
  • 最後の未処理の例外はまだユニットテスターのバグだと思いますか?
4

3 に答える 3

2

私は自分のプロジェクトの1つでこれに似た何かをしました。最初に新しい単体テスト構成クラスを作成する必要があり、次にデフォルトのonDoneメソッドをオーバーライドできます。次に、最初のテストの前に、単体テストの構成としてそれを渡す必要があります。

小さな例:

import 'package:unittest/unittest.dart' as ut;

class MyConfig extends ut.Configuration {

  MyConfig();

  void onDone(int passed, int failed, int errors, List<ut.TestCase> results,
          String uncaughtError) {
    // Only look at first failure:
    if(failed > 0) {
      var fail;
      for(var test in results) {
        if(test.result == 'fail' || test.result == 'error') {
          fail = test;
          break;
        }
      }

      print('Failed at: ${fail.description}');
      print(fail.message);
    }
  }
}

void main() {
  var unitConf = new MyConfig();
  ut.configure(unitConf);

  // Tests here ...
}

また、興味がある場合は、答えに厳密には関係ありませんが、ここで私のプロジェクトを見ることができます。ここでは、ダーツのミニチュートリアルを作成するためにユニットテスト構成を高度にカスタマイズしています(まだ不完全ですが、オーバーライドに関するコード) unittestsは機能しています)。問題のクラスはlib/src/config_koans.dartにあります

于 2012-12-13T13:38:53.770 に答える
1

試す..

import 'package:unittest/unittest.dart';

main() {
  SimpleConfiguration config = new SimpleConfiguration();
  config.throwOnTestFailures = false;
  config.stopTestOnExpectFailure = false;
  unittestConfiguration = config;

  test(....
于 2014-09-12T13:50:39.997 に答える