以下示例失败:
FAIL: MyClass tests getClassReturnsConstructorForDouble
Expected: ?:<double>
Actual: ?:<double>
示例:
test("getClassReturnsConstructorForDouble", () {
double object = 10.1;
Type objectClass = reflect(object).type.reflectedType;
expect(objectClass, equals(object.runtimeType));
});
是否无法准确反映int / double类型?
答案 0 :(得分:6)
reflectType为您提供真正的实现类型。 runtimeType可以设计,也可以设计。
对于字符串和其他内置类型,各种数字的数量可以有不同的实现,但它们是公知的。
例如,我们可能对不同大小的整数有不同的实现类型,但是他们都会说他们的runtimeType是int。如果你反思它们,你可以看到差异。
另一个例子可能是String。例如,可能有纯ASCII字符串的专用类,因为它们可以更紧凑地表示。这不会在基础级别公开:runtimeType是String。除非你通过反射来挖掘它,否则你无法检测到它。
答案 1 :(得分:0)
我认为反射正在向您返回正确的类型,但是您的测试失败,因为objectClass和object.runtimeType是两个单独的对象,因此彼此不相等。如果你首先将它们转换为字符串,它们将彼此相等:
expect(objectClass.toString(), equals(object.runtimeType.toString()));