这是我的构造函数:
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位数。所以,这就是我为它写的测试:
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()函数来确保抛出正确异常消息的正确异常。
这是我在运行上面的测试时遇到的错误:
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>
请帮帮忙!
发布于 2018-03-09 02:03:24
关闭!throwA实际上是另一个Matcher,而不是Type。
假设您有一些扩展FormatException的内容,您可以编写:
expect(() {
...
}, throwsFormatException);如果您不这样做,您可以自己制作一种复合匹配器:
final throwsException = throwsA(const isInstanceOf<Exception>());
...
expect(() {
...
}, throwsException);其原因是您可以编写不同的组合匹配器。例如,这里有一个检查是否抛出具有.toString() of 'Bad thing occured'的东西
expect(() {
...
}, throwsA(predicate((e) => e.toString().contains('Bad thing'));您可以在这里了解更多关于matchers的信息:
https://stackoverflow.com/questions/49185319
复制相似问题