第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何為類(lèi)中的方法編寫(xiě)單元測(cè)試,但不調(diào)用 C# 中的類(lèi)的構(gòu)造函數(shù)

如何為類(lèi)中的方法編寫(xiě)單元測(cè)試,但不調(diào)用 C# 中的類(lèi)的構(gòu)造函數(shù)

C#
藍(lán)山帝景 2021-12-05 16:59:43
我想MethodA在class A. 但是,我真的不想MethodB在構(gòu)造 時(shí)調(diào)用A,因?yàn)樗枰芏鄷r(shí)間來(lái)處理。有什么辦法可以處理嗎? MethodB需要在其他任何事情之前調(diào)用,所以我不能將它移出 ctor(它初始化listA,listB和listC字段)。我不知道如何為此使用模擬框架。public Class A {  List<int> listA;  List<int> listB;  List<int> listC;  public A()  {          MethodB();    // Long processing.  }  public List<int> GetA()  {      return listA;  }   public List<int> GetB()  {      return listB;  }   public List<int> GetC()  {      return listC;  }   private void MethodB()  {      // Expensive initialization of list fields.  }  public bool MethodA(customerCollection foo)  {        for (int i = 0; i < customerCollection .Count; i++)        {            if (customerCollection[i].Name == "Something")            {                return true;            }        }      return false;  }}
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

據(jù)我所知,您MethodA不需要A實(shí)例即可運(yùn)行,因此您可以將其更改為static并在沒(méi)有A實(shí)例的情況下對(duì)其進(jìn)行測(cè)試。但請(qǐng)注意,從 OOP 的角度來(lái)看,此方法在A類(lèi)中沒(méi)有位置(單一職責(zé)原則),因此您需要進(jìn)行一些重構(gòu)。


查看完整回答
反對(duì) 回復(fù) 2021-12-05
?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

雖然很清楚MethodAcan be static,但它不使用class我建議采用不同方法的任何字段,因?yàn)閱?wèn)題用moq和inversion-of-control標(biāo)簽標(biāo)記。進(jìn)行一些重新設(shè)計(jì),您可以將其存檔...例如,您可以通過(guò)IRepository界面公開(kāi)列表,然后您可以利用 IoC 原則在單元測(cè)試中啟用模擬。像這樣的東西:


public interface IRepository

{

    void Init();

    IList<int> Get();

}


public Class A 

{    

  IRepository _aRepository;

  IRepository _bRepository;

  IRepository _cRepository;


  public A(IRepository aRepository, IRepository bRepository, IRepository bRepository)

  {

    _aRepository = aRepository;

    _bRepository = bRepository;

    _cRepository = cRepository;


     MethodB();

  }


  public IList<int> GetA()

  {

      return _aRepository.Get();

  } 


  public IList<int> GetB()

  {

      return _bRepository.Get();

  } 


  public IList<int> GetC()

  {

      return _cRepository.Get();

  } 


  private void MethodB()

  {

      _aRepository.Init();

      _bRepository.Init();

      _cRepository.Init();

  }


  public bool MethodA(customerCollection foo){...whatever...}

}

然后在單元測(cè)試中,您可以模擬您的存儲(chǔ)庫(kù)并利用 Moq 庫(kù)


Mock<IRepository> aRepositoryMock = new Mock<IRepository>();

Mock<IRepository> bRepositoryMock = new Mock<IRepository>();

Mock<IRepository> cRepositoryMock = new Mock<IRepository>();


aRepositoryMock.Setup(m => m.Init)...setup Callback for example

aRepositoryMock.Setup(m => m.Get()).Returns(...some list...)


...aslo you can setup b and c repositories...


var sut = new A(aRepositoryMock.Object, bRepositoryMock.Object, cRepositoryMock.Object);


查看完整回答
反對(duì) 回復(fù) 2021-12-05
  • 2 回答
  • 0 關(guān)注
  • 219 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)