我想模擬(使用Moq)類設置一個只顯示兩個屬性的類的返回對象。設置一個只顯示屬性的Mocked(Moq)類
在我有限的Moq經驗中,我通常會使用Setup()lamda來定義方法調用,然後使用Returns()來回吐所需的輸出。
我在這裏倒下的是Setup()。沒有一個「方法」可以調用,因爲構造函數完成這項工作,填充這兩個屬性然後返回。
我的班,我想嘲笑......明明空置下來:
public class CarResponse
{
public IMetaModel meta { get; set; }
public List<ICarModel> cars { get; set; }
public CarResponse(Common.Models.Car car)
{
this.cars = new List<ICarModel>();
}
}
我在嘲笑愚蠢的嘗試:
private Mock<CarResponse> _carResponse = new Mock<CarResponse>(MockBehavior.Strict);
_carResponse.Setup(?????).Returns(new CarResponse() { meta = new MetaModelV2(), cars = foo });
爲了進一步澄清...這裏是代碼我正在嘗試編寫單元測試:
public HttpResponseMessage AddPickup()
{
//....code removed for brevity....
//this repository is mocked and returns the object exactly as I want it
var car = carRepository.GetCar(carId);
if (!errorInfo.Any()) //This check is bogus it never gets sets
{
RequestHelper rqh = new RequestHelper();
response = rqh.CreateResponse(Request, HttpStatusCode.OK, new CarResponse(car));
}
我的單元測試:
[TestMethod]
public void AddValidPickupCorrectResponse()
{
//arrange
//...lots of code here left off for setting up http context etc
//act---
var response = controller.AddPickup();
//assert
}
如果我使用precanned對象的建議我將如何「掛鉤」,它與被測代碼。例如,我寫了一個單元測試,使用我的預先封裝的對象而不是Moq,但是如何獲得SUT使用的預先封裝的對象?
'CarResponse'是'PoCo'類,你爲什麼會想嘲弄嗎? –
@OldFox ...是的,它確實是一個PoCo ...我如何將它從單元測試「傳遞」給SUT? – GPGVM
SUT的外觀如何?這個例子中的問題是什麼?(使用'CreateResponse'的例子)請添加UT,你正試圖驗證的場景和被測試的類... –