如何覆盖基本抽象 class 的行为?
How to override behavior of base abstract class?
如何在测试派生 class 时覆盖基础 class 行为?
public abstract BaseController
{
public virtual bool DoStuff(){};
}
public class UsageController : BaseController
{
public string MethodToTest()
{
if (base.DoStuff())
{return "yes";}
return "no";
}
}
我想为 DoStuff() 设置 return 值,这可能吗?
[Test]
public void Returns_Yes_When_True()
{
var sut = new UsageController();
//how would I setup the behavior of DoStuff?
Assert.That(sut.MethodToTest()=="yes");
}
How do I override base class behavior when testing the derived class?
通过实际覆盖它。前提是UsageController
不封
public class TestController : UsageController {
public override bool DoStuff(){ return true; };
}
继承派生class并在测试中使用存根
[Test]
public void Returns_Yes_When_True() {
//Arrange
var expected = "yes";
var sut = new TestController();
//Act
var actual = sut.MethodToTest();
//Assert
Assert.That(expected == actual);
}
更新:
去掉base
调用实例方法就通过了
public class UsageController : BaseController {
public string MethodToTest() {
if (DoStuff())
{return "yes";}
return "no";
}
}
这是有道理的,因为如果我没记错的话,指南建议应该在覆盖中调用 base
。
如何在测试派生 class 时覆盖基础 class 行为?
public abstract BaseController
{
public virtual bool DoStuff(){};
}
public class UsageController : BaseController
{
public string MethodToTest()
{
if (base.DoStuff())
{return "yes";}
return "no";
}
}
我想为 DoStuff() 设置 return 值,这可能吗?
[Test]
public void Returns_Yes_When_True()
{
var sut = new UsageController();
//how would I setup the behavior of DoStuff?
Assert.That(sut.MethodToTest()=="yes");
}
How do I override base class behavior when testing the derived class?
通过实际覆盖它。前提是UsageController
不封
public class TestController : UsageController {
public override bool DoStuff(){ return true; };
}
继承派生class并在测试中使用存根
[Test]
public void Returns_Yes_When_True() {
//Arrange
var expected = "yes";
var sut = new TestController();
//Act
var actual = sut.MethodToTest();
//Assert
Assert.That(expected == actual);
}
更新:
去掉base
调用实例方法就通过了
public class UsageController : BaseController {
public string MethodToTest() {
if (DoStuff())
{return "yes";}
return "no";
}
}
这是有道理的,因为如果我没记错的话,指南建议应该在覆盖中调用 base
。