簡體   English   中英

如何覆蓋基本抽象類的行為?

[英]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");
}

測試派生類時如何覆蓋基類行為?

通過實際覆蓋它。 UsageControllerUsageController未密封。

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

基本(C#參考)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM