如何在单元测试中访问 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 类的主要内容,如果未能解决你的问题,请参考以下文章

Flutter单元测试

你如何在 Dart 中对异常进行单元测试?

如何在单元测试期间访问 .war 类路径中的文件?

在 Dart 中运行所有单元测试

如何从 Dart VM / Dart 集成测试访问 Firebase Firestore?

如何让单元测试访问核心数据模型