如何编写单元测试来测试请求接口是否提供了实现?我正在使用NUnit和StructureMap
根据代码中的示例,这可能是这样的吗?我遇到的问题是我不知道如何设置测试。
代码段
[Test]
public void TestCustomerRegistration()
{
var res = ObjectFactory.GetInstance<ICustomer>();
Assert.IsNotNull(res, "Cannot get an Customer");
}
这已存在于代码中
我不确定是否必须在ICustomer测试中使用类似的东西?不确定这是什么。
[TestFixtureSetUp]
public void SetUp()
{
ObjectFactory.Initialize(x =>
{
x.AddRegistry<InfrastructureRegistry>();
x.AddRegistry<RepositoryRegistry>();
});
var container = ObjectFactory.Container;
IDependencyResolver resolver = new SmDependencyResolver(container);
ObjectFactory.Configure(x =>
{
x.For<IDependencyResolver>().Use(resolver);
});
}
采取以下MVC控制器
我需要编写一个测试,当调用_customer.GetById(id)时,StructureMap提供'Customer'。希望这有帮助
private ICustomer _customer;
public MyController(ICustomer customer)
{
_customer = customer;
}
public ActionResult GetCustomer(int id)
{
var result = _customer.GetById(id); // I need to test that _customer works
}
谢谢,
答案 0 :(得分:0)
如果您正在编写无用的测试来检查StructureMap的某些配置(用于单元测试,而不是用于实际运行的应用程序),那么它很容易实现!使用Assert.IsInstanceOf<T>
检查返回对象的确切类型。它应该是您希望StructureMap配置为返回客户界面的类型:
[Test]
public void TestCustomerRegistration()
{
var customer = ObjectFactory.GetInstance<ICustomer>();
Assert.IsNotNull(customer, "Cannot get an Customer");
Assert.IsInstanceOf<SpecificCustomerType>(customer, "Wrong customer type");
}
UPDATE 你应该与其他对象隔离测试控制器(否则你不会知道失败的根源),你的控制器测试看起来应该是(Moq样本)
[Test]
public void ShouldReturnExistingCustomer()
{
// Arrange
int id = 42; // or random numer
var dto = // data which ICustomer should return
Mock<ICustomer> customerMock = new Mock<ICustomer>();
customerMock.Setup(c => c.GetById(id)).Returns(dto)
var controller = new MyController(customer.Object);
// Act
var result = controller.GetCustomer(id);
// Assert
customerMock.VerifyAll();
Assert.IsNotNull(result); // etc
}
这是一个控制器测试,它验证控制器是否正常工作(并调用客户获取数据)。如果您想验证_customer
是否有效,那么您应该编写客户测试。