无法在单元测试项目中获取 class 的默认构造函数
Unable to get Default Constructor for class in Unit Test Project
我已经创建了一个单元测试项目。我得到一个异常指定
Unable to get default constructor for class *****.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
如何解决该问题。我不想在传递时生成空值。
请帮助我提出一种无需使用 Moq
或任何其他模拟框架即可解决此问题的方法。
正如讨论的那样。
在初始化测试 class 时运行一次。
[ClassInitialize]
public void SetUp()
{
_loggingService = new LoggingService();
_userManager = new UserManager();
}
您也可以使用
[TestInitialize]
public void Initalize()
{
_loggingService = new LoggingService();
_userManager = new UserManager();
}
这将 运行 在每个测试之前 运行 以防每个测试需要不同的条件。
正如讨论的那样。 ILoggingService 和 IUserManager 是接口。您需要将它们实例化为该接口的任何实现 class "implements"。
如果您不确定.. 右键单击接口名称并选择 "Go To Implementation"
我已经创建了一个单元测试项目。我得到一个异常指定
Unable to get default constructor for class *****.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
如何解决该问题。我不想在传递时生成空值。
请帮助我提出一种无需使用 Moq
或任何其他模拟框架即可解决此问题的方法。
正如讨论的那样。
在初始化测试 class 时运行一次。
[ClassInitialize]
public void SetUp()
{
_loggingService = new LoggingService();
_userManager = new UserManager();
}
您也可以使用
[TestInitialize]
public void Initalize()
{
_loggingService = new LoggingService();
_userManager = new UserManager();
}
这将 运行 在每个测试之前 运行 以防每个测试需要不同的条件。
正如讨论的那样。 ILoggingService 和 IUserManager 是接口。您需要将它们实例化为该接口的任何实现 class "implements"。
如果您不确定.. 右键单击接口名称并选择 "Go To Implementation"