我需要对抽象类中定义的虚方法进行单元测试。但是基类是抽象的,所以我无法创建它的实例。你建议我做什么?
答案 0 :(得分:3)
我不确定你的抽象类是什么样的,但如果你有类似的东西:
public abstract class SomeClass
{
public abstract bool SomeMethod();
public abstract int SomeOtherMethod();
public virtual int MethodYouWantToTest()
{
// Method body
}
}
然后,正如@David在评论中所说:
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());
}
}
答案 1 :(得分: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);
}