首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在dart中测试PODO构造函数异常

在dart中测试PODO构造函数异常
EN

Stack Overflow用户
提问于 2018-03-09 01:36:44
回答 1查看 251关注 0票数 1

这是我的构造函数:

代码语言:javascript
复制
Merchant(
  this._firstName,
  this._lastName,
  this._company,
  this._buildingNumber,
  this._location,
  this._city,
  String pin,
  String phone,
  String email,
  this._image) {
  _validatePin(pin) ? _pin = pin : throw pinFormatException;
  _validatePhone(phone) ? _phone = phone : throw phoneFormatException;
  _validateEmail(email) ? _email = email : throw emailFormatException;
}

我想对这个构造函数进行单元测试。我想测试在数据验证失败时抛出正确的异常。我要密码是6位数。所以,这就是我为它写的测试:

代码语言:javascript
复制
test('pin must be a 6-digit number', () {
  expect(() {
    new Merchant(FIRST_NAME, LAST_NAME, COMPANY, BUILDING_NUMBER, LOCATION,
        CITY, 1234567/*PIN*/, WHATSAPP_NUMBER, EMAIL, IMAGE_RESOURCE);
  }, throwsA(Exception));
});

我想知道如何正确地使用throwsA()函数来确保抛出正确异常消息的正确异常。

这是我在运行上面的测试时遇到的错误:

代码语言:javascript
复制
Expected: throws ?:<Exception>
  Actual: <Closure: () => dynamic>
   Which: threw ?:<Exception: pin codes are 6-digit numbers>
          stack package:mnshi/model/merchant.dart 33:38                                              new Merchant
                /home/raveesh/MyCode/code/production/mnshi/test/cli_tests/merchant_tests.dart 27:21  main.<fn>.<fn>.<fn>
                package:test                                                                         expect
                /home/raveesh/MyCode/code/production/mnshi/test/cli_tests/merchant_tests.dart 27:7   main.<fn>.<fn>

package:test                             expect
test/cli_tests/merchant_tests.dart 27:7  main.<fn>.<fn>

请帮帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-09 02:03:24

关闭!throwA实际上是另一个Matcher,而不是Type

假设您有一些扩展FormatException的内容,您可以编写:

代码语言:javascript
复制
expect(() {
  ...
}, throwsFormatException);

如果您不这样做,您可以自己制作一种复合匹配器:

代码语言:javascript
复制
final throwsException = throwsA(const isInstanceOf<Exception>());

...

expect(() {
  ... 
}, throwsException);

其原因是您可以编写不同的组合匹配器。例如,这里有一个检查是否抛出具有.toString() of 'Bad thing occured'的东西

代码语言:javascript
复制
expect(() {
  ...
}, throwsA(predicate((e) => e.toString().contains('Bad thing'));

您可以在这里了解更多关于matchers的信息:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49185319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档