我有一个叫做#34的基类;问题"和几个子课程,如" TrueFalse"," MultipleChoice"," MatchPairs"等...
基类具有所有子类都使用的逻辑方法,例如发送分数和引发事件。
我为子类设置了单元测试,但我不确定如何为基类中的方法设置单元测试。
我做了一些搜索,我知道我需要创建一个类的模拟但我不知道如何做到这一点,因为我只看到如何在可实例化的对象上执行此操作。
我有Moq& NUnit安装在项目中,所以理想情况下就像使用它一样。我还是编程新手,这是我第一次添加单元测试,所以我感谢你给我的任何建议。
我首先在网站上搜索并发现了几个类似的问题,但他们没有提供任何关于如何做的例子,只是需要嘲笑。
非常感谢。
答案 0 :(得分:0)
我试图模拟一个抽象类,但是这种方式对我没有用。 所做的工作是创建一个扩展抽象类的新类
class newclass : abstractClass
{
}
像这样,我可以设置属性并测试主要方法
答案 1 :(得分:0)
没有简单的方法可以测试它,
最好的选择是:
例如你有下一个继承结构
class Question {
protected virtual bool CheckCorrect(params int[] answers){
return answers.Any(x => x== 42);
}
}
class TrueFalse: Question {
public int SelectedAnswer {get;set;}
public bool IsCorrect(){
return CheckCorrect(SelectedAnswer );
}
}
class MultipleChoice: Question {
public int[] SelectedAnswers {get;set;}
public bool IsCorrect(){
return CheckCorrect(SelectedAnswers );
}
}
对此的测试方法:
abstract class TrueFalseTest: TrueFalseTest{
public abstract bool CheckCorrectReal(params int[] answers);
public override bool CheckCorrect(params int[] answers){
return CheckCorrect(SelectedAnswer );
}
}
abstract class MultipleChoiceTest: MultipleChoice {
public abstract bool CheckCorrectReal(params int[] answers);
public override bool CheckCorrect(params int[] answers){
return CheckCorrect(SelectedAnswer );
}
}
和测试方法本身:
class TestQuestionForms{
[Fact]
public void TrueFalseTest_ShouldExecute_CheckCorrectReal()
{
//setup
var mock = new Mock<TrueFalseTest>();
mock.Setup(q => q.CheckCorrectReal(It.IsAny<int[] answers>))
.Returns(true);
//action
mock.Object.IsCorrect();
//assert
mock.Verify(db => db.CheckCorrectReal());
}
[Fact]
public void MultipleChoiceTest_ShouldExecute_CheckCorrectReal()
{
//setup
var mock = new Mock<MultipleChoiceTest>();
mock.Setup(q => q.CheckCorrectReal(It.IsAny<int[] answers>))
.Returns(true);
//action
mock.Object.IsCorrect();
//assert
mock.Verify(db => db.CheckCorrectReal());
}
}