[英]How to override behavior of base abstract class?
測試派生類時如何覆蓋基類行為?
public abstract BaseController
{
public virtual bool DoStuff(){};
}
public class UsageController : BaseController
{
public string MethodToTest()
{
if (base.DoStuff())
{return "yes";}
return "no";
}
}
我想設置DoStuff()的返回值,這可能嗎?
[Test]
public void Returns_Yes_When_True()
{
var sut = new UsageController();
//how would I setup the behavior of DoStuff?
Assert.That(sut.MethodToTest()=="yes");
}
測試派生類時如何覆蓋基類行為?
通過實際覆蓋它。 UsageController
是UsageController
未密封。
public class TestController : UsageController {
public override bool DoStuff(){ return true; };
}
從派生類繼承並在測試中使用存根
[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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.