我有一个ASP.NET MVC应用程序,它有一个用于依赖注入的NInject容器。正如所宣传的那样,IoC使我可以很容易地单独测试组件,然后在应用程序中轻松组合组件。
我想测试我对DI的使用。我不想测试DI组件是否正常运行。我相信NInject人员做得非常好。我想测试我已经使用DI来根据我的应用程序的意图正确地组成组件。我不想测试NInject,我想测试我对NInject的使用。 (我也不想尝试将其归类为单元测试或集成测试。我只希望能够在我开始制作之前的某个时间,证明为什么我对自己对NInject的特殊使用有信心。)
假设我有类似的东西:
private static void RegisterDatabaseConnections(IBindingRoot kernel)
{
string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
kernel.Bind<IProvideDbConnections>()
.To<Connector>()
.WhenInjectedInto<ActivityStore>()
.WithConstructorArgument("connectionString", connectionString);
kernel.Bind<IProvideDbConnections>()
.To<Connector>()
.WhenInjectedInto<CrConnector>()
.WithConstructorArgument("connectionString", connectionString);
kernel.Bind<IProvideDbConnections>()
.To<CrConnector>()
...
}
我有的地方:
public class Writer
{
public Writer(IProvideDBConnections connector)
{
Connector = connector;
}
private IProvideDBConnections Connector { get; set; }
....
}
我想写一个像
这样的MSTest [TestMethod]
public void TestThatWriterCrConnectorContainsConnector()
{
...
}
这样我就可以验证我写了RegisterDatabaseConnections
给我的预期。我无法开始沿着这条路走下去,因为我不知道访问内核来设置任何测试。在应用程序中启动内核的代码是静态私有方法的集合,对我来说有点神秘,我不知道如何在测试环境中执行此操作。有什么帮助吗?
答案 0 :(得分:0)
我会创建自己的内核和#include "soapExchangeServiceBindingProxy.h"
#include "ExchangeServiceBinding.nsmap"
int main()
{
ExchangeServiceBindingProxy service;
service.soap_endpoint = "https://outlook.office365.com/ews/exchange.asmx";
ns1__GetServerTimeZonesType request;
__ns1__GetServerTimeZonesResponse response;
const std::string s("Eastern Standard Time");
request.Ids = (ns2__NonEmptyArrayOfTimeZoneIdType *)&s;
if(service.GetServerTimeZones(&request , response) == SOAP_OK){
std::cout << "Success Response: "<< response.ns1__GetServerTimeZonesResponse << std::endl;
}
else
service.soap_stream_fault(std::cerr);
service.destroy(); // delete data and release memory
return 0;
}
您想要测试的模块。
Load()
这假设您已经在[TestMethod]
public void TestThatWriterCrConnectorContainsConnector()
{
var kernel = new StandardKernel();
kernel.Load(new ModuleA(), new ModuleB());
var obj = kernel.Get<Writer>();
// ... assert
}