我需要單元測試在一個抽象類定義的虛擬方法。但是基類是抽象的,所以我不能創建它的一個實例。你推薦我做什麼?如何測試在一個抽象類定義的虛擬方法?
-1
A
回答
3
我不知道你的抽象類是什麼樣子,但如果你有這樣的:
public abstract class SomeClass
{
public abstract bool SomeMethod();
public abstract int SomeOtherMethod();
public virtual int MethodYouWantToTest()
{
// Method body
}
}
然後,當@大衛建議的意見:
public class Test : SomeClass
{
// You don't care about this method - this is just there to make it compile
public override bool SomeMethod()
{
throw new NotImplementedException();
}
// You don't care about this method either
public override int SomeOtherMethod()
{
throw new NotImplementedException();
}
// Do nothing to MethodYouWantToTest
}
然後你只需實例Test
爲你的單元測試:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
SomeClass test = new Test();
// Insert whatever value you expect here
Assert.AreEqual(10, test.MethodYouWantToTest());
}
}
3
有沒有規定說一個單元測試無法定義自己的類。這是一個相當普遍的做法(至少對我來說無論如何)。
考慮一個標準的單元測試的結構:
public void TestMethod()
{
// arrange
// act
// assert
}
這種「安排」的步驟可以包括任何合理的動作(沒有副作用的測試之外),它建立你想考什麼。這可以很容易地包括創建一個類的實例,其唯一目的是運行測試。例如,如下所示:
private class TestSubClass : YourAbstractBase { }
public void TestMethod()
{
// arrange
var testObj = new TestSubClass();
// act
var result = testObj.YourVirtualMethod();
// assert
Assert.AreEqual(123, result);
}
相關問題
- 1. 虛擬類中的抽象方法
- 2. 如何測試抽象類的方法?
- 3. 虛擬和抽象方法
- 4. 類既抽象和虛擬方法
- 5. 關於基類VS抽象方法的虛擬虛方法
- 6. 如何使用抽象方法測試抽象類中的方法?
- 7. 抽象方法是虛擬的嗎?
- 8. FakeItEasy - 如何測試虛擬方法
- 9. 使用Mockito進行單元測試 - 使抽象模擬虛擬方法
- 10. 抽象方法聲明 - 虛擬?
- 11. C#虛擬(或抽象)靜態方法
- 12. 如何在ApplicationRecord抽象基類中測試方法?
- 13. C++中的抽象類和純虛擬方法
- 14. Cython中的抽象類(使用純虛擬方法)
- 15. 嘗試在抽象類實例中使用虛擬類變量
- 16. 抽象和虛擬相同的含義?
- 17. 如何定義抽象類
- 18. 測試抽象類
- 19. 抽象測試類
- 20. 使用虛擬類型(抽象類型)
- 21. 抽象類和虛擬方法 - 顯示總數
- 22. 抽象類的方法覆蓋另一個抽象類
- 23. 如何定義兩個抽象類
- 24. 在Objective C中模擬抽象類和抽象方法?
- 25. 命名約定非虛擬和抽象方法
- 26. PHPUnit:在沒有具體方法的情況下測試一個抽象類
- 27. 使用虛擬方法的靜態抽象對象
- 28. Moq,抽象類和虛擬屬性
- 29. C++,變量,抽象/虛擬類
- 30. 虛擬成員調用抽象類
您的測試本身可以有一個從抽象類繼承的測試類。然後測試可以實例化一個實例並測試功能。這更像是一個「安排」步驟,但仍然是我認爲有效的一步。 – David
我與@大衛同意在這裏。 – EJoshuaS