无法在单元测试项目中获取类的默认构造函数

时间:2017-06-02 07:46:52

标签: c# asp.net-mvc unit-testing parameterized-unit-test

我创建了一个单元测试项目。我得到一个指定

的异常
  

无法获取类*****的默认构造函数.Tests.Controllers.PersonRegistration

namespace *****.Tests.Controllers
{
[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);
    }
  }
}

为了根除这个问题,一些线程说添加一个没有参数的默认构造函数。所以我也添加了这个

public PersonRegistration()
 {
 }

但后来我解决了这个异常。但我得到NULL_userManager_loggingService

Null Values

如何解决该问题。我不希望在传递时生成空值。

请在不使用Moq或任何其他模拟框架的情况下,通过建议解决此问题的方法来帮助我。

1 个答案:

答案 0 :(得分:4)

正如所讨论的那样。

初始化测试类时运行一次。

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

您也可以使用

 [TestInitialize]
 public void Initalize()
 {
      _loggingService = new LoggingService();
       _userManager = new UserManager();
 }

这将在每个测试运行之前运行,以防每个测试需要不同的条件。

正如所讨论的那样。 ILoggingService和IUserManager是接口。您需要将它们实例化为任何实现类"实现"那个界面。

如果您不确定..右键单击界面名称并选择"转到实施"