无法获取默认构造函数

时间:2017-06-01 07:12:06

标签: c# asp.net asp.net-mvc constructor default-constructor

运行单元测试项目时遇到以下问题。

  

无法获取类********

的默认构造函数
[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 = "test123@gmail.com";
        var result = ac.Register(model);
        Assert.AreEqual("User Registered Successfully", result);
    }

如何解决这个问题。一些答案说要使用参数较少的构造函数。但在这里我需要参数。

RegisterBindingModel()

public class RegisterBindingModel
{
    public RegisterBindingModel();
    [Display(Name = "User name")]
    [Required]
    public string UserName { get; set; }
}

问题Image

3 个答案:

答案 0 :(得分:3)

您应该使用像jest settings这样的模拟框架。

示例:

.GlobalEnv

您可以从Moqthis链接获取帮助。

答案 1 :(得分:3)

我刚在单元测试中对此进行了测试。

添加

public PersonRegistration()
{
}

它应该运行良好。

单元测试类别不需要构造函数。如果您正在使用像Moq这样的模拟框架,那么我使用工厂来返回我测试的类的相关moq。

 public ILoggingService ReturnMockLoggingService()
 {
       var mockService = new Mock<ILoggingService>();
       return mockService.Object;
 }

然后在测试夹具中。

[TestMethod]
public void TestMethod1()
{
    RegisterBindingModel model = new RegisterBindingModel();

    var logService = MockFactory.ReturnMockLoggingService();
    var userService = MockFactory.ReturnMockUserService();
    AccountController ac = new AccountController(userService, logService);

    model.UserName = "test123@gmail.com";
    var result = ac.Register(model);
    Assert.AreEqual("User Registered Successfully", result);
}

如果你不使用模拟,那么只需在测试中实例化用户和日志服务,或者创建一个SetUp。

[ClassInitialize]
public void SetUp()
{
    _loggingService = new LoggingService();
    _userManager = new UserManager();
}

希望有所帮助。

答案 2 :(得分:-1)

您只需将[TestMethod]替换为[Fact](这是xunit框架的一部分),它就可以正常运行。