如何在单元测试中访问 Dart 类
Posted
技术标签:
【中文标题】如何在单元测试中访问 Dart 类【英文标题】:How to access a Dart class in a unit test 【发布时间】:2013-04-22 01:28:04 【问题描述】:使用 Dart Milestone 4 版本 21658
我是 Dart 新手。我创建了一个类。我想对它进行单元测试。类和单元测试都在使用 Dart 编辑器创建的同一个 Dart 项目中。我不知道如何让单元测试看到我的课。我该怎么做?
项目名称: DartExp
目录结构:
src/foo.dart
test/foo_test.dart
文件内容:
--- foo.dart 开始----
//library foo;
class Foo
String bar;
--- foo.dart 结束 ----
--- foo.dart 开始----
import 'package:unittest/unittest.dart';
import 'package:DartExp/foo.dart';
import 'DartExp/foo.dart';
import 'foo.dart';
import 'src/foo.dart';
import 'package:src/foo.dart';
main()
test('test Foo', ()
Foo foo;
//expect(1,1);
);
--- foo.dart 结束 ----
我尝试过的事情:
在 Dart 编辑器中,在文件 foo_test.dart 中,我所有导入 foo.dart 的尝试都被标记为错误,因为“...不是有效的 uri”。编辑还说 Foo 类是未定义的。 删除所有 foo.dart 导入语句也不起作用。 把 foo.dart 变成一个库也不行。
Dart 导入语句的文档似乎没有为这种常见用例提供任何示例。
那么,如何在 Dart 中将类导入单元测试?
【问题讨论】:
@Greg:感谢您花时间回答我的问题。您的回答让我看到(并纠正)我最初的问题陈述中的一个错误。单元测试 foo_test.dart 实际上在 'test' 目录中,而不是在 'lib' 中。抱歉信息不正确。 【参考方案1】:Dart 使用Pub package manager 进行依赖管理,并有一个特定的建议包布局,您可以阅读on the Pub website。
试试这个并运行pub install
。
目录结构:
pubspec.yaml
lib/foo.dart
test/foo_test.dart
pubspec.yaml
name: my_package
description: description
dev_dependencies:
unittest: any
lib/foo.dart:
library foo;
class Foo
test/foo_test.dart:
import 'package:unittest/unittest.dart';
import 'package:foo/foo.dart';
main()
test('test Foo', ()
Foo foo;
);
package:
URL 是从 Pub 创建的 packages
目录中解析的。为了更好地理解这一点,请在运行 pub install
后查看 packages
目录的内容。
所以这个:
import 'package:[package-name]/[file].dart';
导入位于名为[package-name]
的包中的库,该库位于该包的lib
文件夹中名为[file].dart
的文件中。 (注意:一个包可以有多个库。)
【讨论】:
在我受 Java 影响的头脑中,我的 Foo 类不是库。将它放在“src”目录中似乎更好。如果类不应该在 src 中,那么 src 是干什么用的? Dart Editor 创建了 src,所以我认为它是 Dart 的包管理器所期望的标准目录 [lib, test, src, web]。你的回答也让我问,是否必须将所有 Dart 类都指定为库?感谢您的帮助。 如果你正在制作一个包,并且想要导出你的库,它们需要在 lib.xml 中。 web 用于需要通过 http 访问的文件,因此您的*** dart 脚本。我之前没有注意到***的 src 。虽然通常有一个 lib/src 来隐藏实现文件。我通常会布局我的文件,以便我可以与 pub 共享它们。但这可能不适用于每种类型的应用程序。对于约定,最好看看 github,看看其他人在做什么。 pub.dartlang.org/doc/package-layout.html【参考方案2】:这些路径中的任何一个都使类 Foo 在 Dart 单元测试中可访问。 src/foo.dart 不需要库。但即使是这样,两个导入路径仍然有效。
import '../src/foo.dart';
import 'package:../src/foo.dart';
顺便说一句,截至 2013 年 4 月 28 日,[http://pub.dartlang.org/doc/package-layout.html] 没有*** src 目录(所以我猜,我的类在非标准目录中)。
【讨论】:
这个技巧曾经奏效,但最近整个路径方案在pub serve中发生了变化:/src/index.html变成了/index.html 所以这个解决方案现在被打破了,“加载时出错/ src/foo.dart”。现在有什么新想法可以对非库代码进行单元测试吗?以上是关于如何在单元测试中访问 Dart 类的主要内容,如果未能解决你的问题,请参考以下文章