2013-07-16 68 views
1

C#命名空間是分層的嗎?名稱空間是否是分層的?

背景: 我正在開發一個測試框架,並且我有每個名稱空間設置固件。例如命名空間A中的SetUpFixture和命名空間A.B.中的一個SetUpFixture。

實際問題: 如果我打電話TestRunner.RunAllTestsInNamespace("A.B") - 測試運行程序是否只調用名稱空間A.B中的SetUpFixture或名稱空間A中的SetUpFixture?

(或其他方式輪:如果我打電話TestRunner.RunAllTestsInNamespace("A") - 應該測試運行也執行在命名空間AB所有測試

+1

相關:http:// stackoverflow。com/questions/125319/should-usings-be-inside-or-outside-the-namespace –

+0

@Jon:你的回答沒有反映在由newStackExchangeInstance指出的問題中。你確定你的答案是正確的嗎? [Jon刪除了他的評論] –

+0

@newStackExchangeInstance:因爲它們似乎是分層的,你會建議在當前命名空間和以上命名空間中執行所有setupfixtures嗎? –

回答

2

關於你的問題:

如果我叫TestRunner.RunAllTestsInNamespace(「A·B」) - 應該測試運行僅調用命名空間A·B的SetUpFixture或也是一個在命名空間?

假設你有結構:

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等)的行爲。

1

是命名空間是分層次的

1

是命名空間是分層次的,但後來。問題是API設計,我想你應該定義你想要實現的行爲

可以肯定的是它是相反的方式(在你的問題中的第二種方式):運行(「AB」 )肯定不會在「A」中運行測試,因爲A不包含在AB中 - > AB包含在A中。

爲什麼沒有一個可選的參數呢?

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

有了這個API的設計:

  • 實施只是稍微複雜
  • 你獲得一定的靈活性
  • 預期的行爲是誰調用該方法的編碼器非常清楚。
+0

我認爲他的方法簽名非常適合遞歸。 –

相關問題