Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写单元测试时无法实例化类错误的代理_C#_Unit Testing_Moq - Fatal编程技术网

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
,但是mock
ExtractFileHandler
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);