1

C# 命名空间是分层的吗?

背景:我正在开发一个测试框架,并且我有每个命名空间设置装置。例如命名空间 A 中的 SetUpFixture 和命名空间 AB 中的一个

实际问题:如果我打电话TestRunner.RunAllTestsInNamespace("A.B")- 测试运行者应该只调用命名空间 AB 中的 SetUpFixture 还是命名空间 A 中的那个?

(或者反过来:如果我调用TestRunner.RunAllTestsInNamespace("A")- 测试运行程序是否也应该执行命名空间 AB 中的所有测试?

4

3 回答 3

2

关于你的问题:

如果我调用 TestRunner.RunAllTestsInNamespace("AB") - 测试运行器应该只调用命名空间 AB 中的 SetUpFixture 还是命名空间 A 中的那个?

假设您具有以下结构:

A.Setup1
A.Test1
A.B.Setup2
A.B.Test2

如果您在现有框架(例如 NUnit)中进行一些简单的测试,您会发现遵循的行为似乎是:

  • 运行A.Test1执行A.Setup1A.Test1
  • 运行A.B.Test2执行A.Setup1, A.B.Setup2,A.B.Test2

这是 NUnit 的行为。其他人的行为可能不同。

您可能想要全面调查和了解现有测试框架(NUnit、XUnit.Net、MSTest 等)的行为。

于 2013-07-16T21:49:40.163 回答
1

是的。命名空间是分层的。

于 2013-07-16T21:27:36.260 回答
1

是的,命名空间是分层的,但问题是 API 设计。我想由你来定义你想要实现的行为。

可以肯定的是,它是相反的(您问题中的第二种方式): Run("AB") 肯定不应该在“A”中运行测试。因为 A 不包含在 AB 中 --> AB 包含在 A 中。

为什么没有一个可选参数呢?

public void RunTests(string @namespace, bool runChildNamespaces = true)

使用此 API 设计:

  • 实现只是稍微复杂一些
  • 你获得了一些灵活性
  • 对于调用该方法的编码人员来说,预期的行为非常清楚。
于 2013-07-16T21:34:50.700 回答