C# 编写单元测试时无法实例化类错误的代理
我有以下课程:C# 编写单元测试时无法实例化类错误的代理,c#,unit-testing,moq,C#,Unit Testing,Moq,我有以下课程: public ExtractUkFileFunction (UkExtractFileHandler fileHandler) { _fileHandler = fileHandler; } 及 我没有很多C#单元测试或Moq方面的经验,因此任何建议都将不胜感激。谢谢 根据您为UKTractFileHandler提供的代码: public class UkExtractFileHandler : ExtractFil
public ExtractUkFileFunction (UkExtractFileHandler fileHandler)
{
_fileHandler = fileHandler;
}
及
我没有很多C#单元测试或Moq方面的经验,因此任何建议都将不胜感激。谢谢 根据您为UKTractFileHandler提供的代码:
public class UkExtractFileHandler : ExtractFileHandler<UkExtractFileHandler.FileMapper>
{
public UkExtractFileHandler(
ILoggerFactory loggerFactory,
IRecordParser recordParser,
IUnzipper unzipper,
IFileStore fileStore,
ILocationService locationService)
: base(recordParser, unzipper, fileStore, locationService)
{
Logger = loggerFactory.Create<ExtractFileHandler>();
}
}
因此,您的问题可能是在这段代码中,您向ExtractFileHandler的构造函数传递的不是4个参数,而是5个参数,该构造函数只需要4个参数:
var mockFileHandler=new Mock(
mockLoggerFactory.Object,我认为问题是由您使用的Moq版本和测试的目标框架引起的。您使用的是.net还是.net core?您有UKTractFileHandler
,但是mockExtractFileHandler
。ExtractFileHandler
看起来怎么样?抱歉,这是一个打字错误@PavelAnikhouski
[Test]
public void Construct_ExtractUkFileFunction_ExpectSuccess()
{
var mockLoggerFactory = new Mock<ILoggerFactory>();
var mockRecordParser = new Mock<IRecordParser>();
var mockUnzipper = new Mock<IUnzipper>();
var mockFileStore = new Mock<IFileStore>();
var mockLocationService = new Mock<ILocationService>();
var mockFileHandler = new Mock<ExtractFileHandler>
(mockLoggerFactory.Object, mockRecordParser.Object, mockUnzipper.Object, mockFileStore.Object, mockLocationService.Object);
var extractUkFileFunction = new ExtractUkFileFunction(mockFileHandler.Object);
Assert.IsNotNull(extractUkFileFunction );
}
Can not instantiate proxy of class: Core.Handlers.UkExtractFileHandler.
Could not find a constructor that would match given arguments:
Castle.Proxies.ILoggerFactoryProxy
Castle.Proxies.IRecordParserProxy
Castle.Proxies.IUnzipperProxy
Castle.Proxies.IFileStoreProxy
Castle.Proxies.ILocationServiceProxy
public class UkExtractFileHandler : ExtractFileHandler<UkExtractFileHandler.FileMapper>
{
public UkExtractFileHandler(
ILoggerFactory loggerFactory,
IRecordParser recordParser,
IUnzipper unzipper,
IFileStore fileStore,
ILocationService locationService)
: base(recordParser, unzipper, fileStore, locationService)
{
Logger = loggerFactory.Create<ExtractFileHandler>();
}
}
public class ExtractFileHandler<T>
{
public ExtractFileHandler(
IRecordParser recordParser,
IUnzipper unzipper,
IFileStore fileStore,
ILocationService locationService)
{
// ...
}
}
public class ExtractFileHandler<T> : ExtractFileHandler
{
}
public class ExtractFileHandler
{
public ExtractFileHandler(
IRecordParser recordParser,
IUnzipper unzipper,
IFileStore fileStore,
ILocationService locationService)
{
// ...
}
}
var mockFileHandler = new Mock<ExtractFileHandler>(
mockLoggerFactory.Object, <- this par. probably doesn't match the constructor signature
mockRecordParser.Object,
mockUnzipper.Object,
mockFileStore.Object,
mockLocationService.Object);