名称空间是否分层?

时间:2013-07-16 21:08:08

标签: c#

C#名称空间是否分层?

背景: 我正在开发一个测试框架,我有每个命名空间的设置夹具。例如命名空间A中的SetUpFixture和命名空间A.B。

中的一个

实际问题: 如果我调用TestRunner.RunAllTestsInNamespace("A.B") - 测试运行器是否应仅调用命名空间A.B中的SetUpFixture或命名空间A中的SetUpFixture?

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

3 个答案:

答案 0 :(得分:2)

关于你的问题:

  

如果我调用TestRunner.RunAllTestsInNamespace(" A.B") - 测试运行器是否应仅调用命名空间A.B中的SetUpFixture或命名空间A中的SetUpFixture?

假设你有结构:

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

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

  • 正在运行A.Test1执行A.Setup1A.Test1
  • 正在运行A.B.Test2执行A.Setup1A.B.Setup2A.B.Test2

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

您可能希望完全调查并了解现有测试框架(NUnit,XUnit.Net,MSTest,其他)的行为。

答案 1 :(得分:1)

是。命名空间是分层的。

答案 2 :(得分:1)

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

可以肯定的是,它是另一种方式(问题的第二种方式):运行(“A.B”)肯定不会在“A”中运行测试。因为A不包含在A.B中 - > A.B包含在A。

为什么没有可选参数?

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

使用此API设计:

  • 实施只是稍微复杂一些
  • 你获得了一些灵活性
  • 调用该方法的编码员的预期行为非常明确。