2 回答

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)。

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);
- 2 回答
- 0 關(guān)注
- 219 瀏覽
添加回答
舉報(bào)