【发布时间】:2024-05-15 16:10:02
【问题描述】:
我正在尝试通过使用 Unity 将两个基于接口的对象注入到类构造函数中。
我目前在单元测试时收到以下错误:
结果消息:
测试方法 TestProject.TFStests.Check_Interface_CheckOut_Method 抛出异常: System.InvalidOperationException:类型 Adp.Tools.VersionControl.TfsVersionControl.TfsVcPromotionManager 没有采用参数的构造函数 (TfsVcQaCheckoutWorker)。
以下代码是我的Unity类,这是用来注册和解析TfsVCPromotionManager对象:
public class UnityClass
{
public static ITfsVcPromotionManager returnNewPromotionManager(
VersionControlServer tfServer)
{
var container = new UnityContainer();
ITfsVcQaCheckinWorker test1 = CreateUnityCheckInWorker();
ITfsVcQaCheckoutWorker test2 = CreateUnityCheckOutWorker(tfServer);
container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
new InjectionConstructor(test2), new InjectionConstructor(test1));
return container.Resolve<TfsVcPromotionManager>();
}
private static ITfsVcQaCheckinWorker CreateUnityCheckInWorker()
{
var container = new UnityContainer();
container.RegisterType<ITfsVcQaCheckinWorker, ITfsVcQaCheckinWorker>();
return container.Resolve<TfsVcQaCheckinWorker>();
}
private static ITfsVcQaCheckoutWorker CreateUnityCheckOutWorker(
VersionControlServer passedServer)
{
var container = new UnityContainer();
container.RegisterType<ITfsVcQaCheckoutWorker, TfsVcQaCheckoutWorker>(
new InjectionConstructor(passedServer));
return container.Resolve<TfsVcQaCheckoutWorker>();
}
}
这是TfsVcPromotionManager 类的构造函数。请注意,它显然采用了基于接口ITfsVcQaCheckoutworker 和ITfsVcCheckinWorker 的实例。
private ITfsVcQaCheckoutWorker _checkOutWorker;
private ITfsVcQaCheckinWorker _checkInWorker;
public TfsVcPromotionManager(ITfsVcQaCheckoutWorker checkOutWorker,
ITfsVcQaCheckinWorker checkInWorker)
{
if (checkOutWorker == null || checkInWorker == null)
{
throw new NullReferenceException();
}
_checkOutWorker = checkOutWorker;
_checkInWorker = checkInWorker;
}
谁能告诉我我做错了什么。
【问题讨论】:
标签: c# exception constructor unity-container integration-testing