0
我將使用單元測試項目創建用戶註冊方法測試。請參考下面的代碼在Mock框架中返回NULL值在UnitTesting中
[TestClass]
public class PersonRegistration
{
private ILoggingService _loggingService;
private IUserManager _userManager;
public PersonRegistration(IUserManager userManager, ILoggingService
loggingService)
{
this._userManager = userManager;
this._loggingService = loggingService;
}
[TestMethod]
public void TestMethod1()
{
RegisterBindingModel model = new RegisterBindingModel();
AccountController ac = new AccountController(_userManager, _loggingService);
model.UserName = "[email protected]";
var result = ac.Register(model);
Assert.AreEqual("User Registered Successfully", result);
}
在上面的代碼,當我跑的測試案例文件,它說
無法獲取默認的構造函數類****。Test.Controllers.PersonRegistraion
爲了克服這個問題,我添加了一個沒有任何參數的默認構造函數。第一個問題解決了。但是然後_userManager
和_loggingService
變爲NULL。見圖像1.
它將引發一個空引用異常(圖像2)
所以我用MOQ(Using Moq
)填滿接口,如以下。
[TestClass]
public class PersonRegistration
{
[TestMethod]
public void TestMethod1()
{
var mockService = new Mock<ILoggingService>();
var mockManager = new Mock<IUserManager>();
RegisterBindingModel model = new RegisterBindingModel();
AccountController ac = new AccountController(mockManager.Object, mockService.Object);
model.UserName = "[email protected]";
var result = ac.Register(model);
Assert.AreEqual("User Registered Successfully", result);
}
}
現在的代碼遍歷高達Register()
,但它返回的結果爲NULL
。這是由於無效的模擬對象?我可以在WebApi項目中正確運行整個過程。但是單元測試項目中同樣的方案返回null。
接口IUserManager
public interface IUserManager : IDisposable
{
Task<string> Register(RegisterBindingModel model);
}
謝謝@ashin。我在一個單獨的測試類中。我可以在哪裏放置上面提供的代碼。 –
在你的測試方法中的下列語句之後:var mockManager = new Mock(); –
ashin
沒有與 '返回的問題(新的結果());'找不到 –