如果我正確理解你,你遇到的主要問題是處理你的WCF服務的狀態,因爲它在啓動時需要它。
首先,很高興看到您對不依賴服務狀態的所有測試用例分別實施了單元測試。
當談到測試狀態的方法,你需要集成測試(但我不想這樣做,因爲術語的頭髮 - 分裂)。爲此,在執行任何測試(隨後可能相互依賴)之前,您只需在安裝方法中初始化您的服務一次。
您正在使用哪種測試框架? NUnit,MSTest還是其他? 假設你使用NUnit,你會使用[OneTimeSetUp]
-attribute初始化WCF服務和使用需要的服務的每個測試實例(和國家,分別爲數據)進行初始化:
namespace Foo
{
[TestFixture]
public class YourServiceTests
{
private IYourService _service;
[OneTimeSetUp]
public void Init()
{
/* Do whatever is necessary to initialize the service */
_service = CreateNewInstance();
}
[OneTimeTearDown]
public void Cleanup()
{
/* optionally provide a teardown method to gracefully shutdown the service */
}
[Test]
public void TestA()
{
var expected = "bar";
var actual = _service.MethodA();
Assert.That(actual, Is.EqualTo(expected));
}
[Test]
public void TestB()
{
// ...
}
}
}
-
關於你提到的其他關注(「我們的問題涉及需要在內存中的數據,並沒有數據合同的一部分,所有的方法。」),我會使用類似的方法:
因爲你想測試不屬於的方法IYourService
-contract你基本上做的和上面一樣([OneTimeSetUp]
),但是現在你要初始化IYourService
的具體實現(例如, YourService
)。然後,您將能夠訪問並測試所有其他公共方法,這些方法不能通過界面/合同訪問。
非常感謝,[OneTimeSetUp] - 屬性正是我所搜索的。但是,你的意思是'你可以訪問和測試所有其他公共方法,這些方法不能通過界面/合同訪問'。這隻適用於公共方法嗎?我們如何測試私有和內部方法? – user2992131
很高興在這裏:-)通常你不會直接測試私有方法。當他們從公共方法中調用時,他們會被間接測試。對於內部方法,您可以使用['InternalsVisibleTo'-attribute](https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute(v = vs.110).aspx)。 – khlr
非常感謝。 – user2992131