【发布时间】:2021-09-04 07:09:20
【问题描述】:
MSTest 框架如何处理依赖于其他单元测试的单元测试?我正在测试一个 REST API,并花了相当长的时间试图了解大局。在此过程中出现了以下问题:
- 我们应该编写调用其他测试方法的测试方法吗?它是否以某种方式违背了 unit 测试的想法?还是应该将单元测试彼此完全隔离?
- 如果被隔离,当某个 api 端点需要输入而只能通过调用另一个 API 端点(已经存在测试)来获取时,我们该怎么办?例如端点
GetMembers端点需要认证令牌,该令牌只能通过调用Login端点获得。每个端点都有一个单独的测试。从TestGetMembers调用TestLogin方法公平吗,还是应该在TestGetMembers中重复TestLogin的整个代码(或者为此编写一个函数来共享代码)? - 我应该将登录令牌保存在哪里,因为所有后续测试都需要它。看起来 MSTest 为每个测试方法创建了一个新的测试类实例,所以我的全局变量丢失了。可以声明
static变量来保存这些值吗? -
async测试呢?我的研究表明async测试可以返回Task,但不能返回Task<T>。 Visual Studio 测试资源管理器没有列出任何返回Task<T>并尝试手动运行它们的测试方法(例如,通过在方法内部右键单击并选择Run Test)在没有实际运行测试方法的情况下完成。有这样的限制吗?如果是,我如何从异步测试方法返回值,该值将被另一个测试方法使用?
【问题讨论】:
-
你在测试代表端点的控制器方法吗?
-
@ElConrado:我正在测试 Web api 公开的所有端点。这基本上是对我的数据服务的所有功能的测试(每个端点一个服务方法)。
-
听起来更像是集成测试。
-
@rene:这不是 mstest 框架应该处理的?
-
测试代码(单元或集成)遵循与常规代码相同的规则。如果您在单一测试方法中遵循 Arrange、Act、Assert 理念,则不会复制/粘贴代码,而是重构(提取方法、移动到基类等)。
标签: c# unit-testing mstest