2016-05-18 35 views
15

Vì vậy, tôi đã có một giải pháp làm việc trên .Net RC1 với Moq, và tôi đã nâng cấp lên RC2 mà tôi thấy rằng Moq.netcore được tạo ra để chạy trên nền tảng mới.Moq.netcore không cho .Net Core RC2

tôi thêm aspnet-contrib để NuGet.config tôi

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <add key="contrib" value="https://www.myget.org/F/aspnet-contrib/api/v3/index.json" /> 
    <add key="NuGet" value="https://api.nuget.org/v3/index.json" /> 
    </packageSources> 
</configuration> 

Tôi đã thêm moq.netcore đến file project.json tôi.

"dependencies": { 
    "Microsoft.NETCore.App": { 
    "version": "1.0.0-rc2-*", 
    "type": "platform" 
    }, 
    "dotnet-test-xunit": "1.0.0-rc2-173361-36", 
    "moq.netcore": "4.4.0-beta8", 
    "xunit": "2.1.0" 
}, 

"testRunner": "xunit", 

"frameworks": { 
    "netcoreapp1.0": { 
    "imports": [ 
     "dotnet5.6", 
     "portable-net451+win8" 
    ] 
    } 
} 

Về cơ bản tôi theo Cli Testing Abstractions UnitTests và tôi nhận được lỗi sau khi instantiatin một đối tượng Mock:

System.IO.FileNotFoundException : 
    Could not load file or assembly 'System.Diagnostics.TraceSource, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

    Stack Trace: 
     at Castle.DynamicProxy.Generators.MethodWithInvocationGenerator.BuildProxiedMethodBody(MethodEmitter emitter, ClassEmitter class, ProxyGenerationOptions options, INamingScope namingScope) 
     at Castle.DynamicProxy.Generators.MethodGenerator.Generate(ClassEmitter class, ProxyGenerationOptions options, INamingScope namingScope) 
     at Castle.DynamicProxy.Contributors.CompositeTypeContributor.ImplementMethod(MetaMethod method, ClassEmitter class, ProxyGenerationOptions options, OverrideMethodDelegate overrideMethod) 
     at Castle.DynamicProxy.Contributors.CompositeTypeContributor.Generate(ClassEmitter class, ProxyGenerationOptions options) 
     at Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateType(String name, Type[] interfaces, INamingScope namingScope) 
     at Castle.DynamicProxy.Generators.BaseProxyGenerator.ObtainProxyType(CacheKey cacheKey, Func`3 factory) 
     at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors) 
     at Moq.Proxy.CastleProxyFactory.CreateProxy(Type mockType, ICallInterceptor interceptor, Type[] interfaces, Object[] arguments) 
     at Moq.Mock`1.<InitializeInstance>b__19_0() 
     at Moq.Mock`1.OnGetObject() 
     at Moq.MockDefaultValueProvider.ProvideDefault(MethodInfo member) 
     at Moq.QueryableMockExtensions.FluentMock[T,TResult](Mock`1 mock, Expression`1 setup) 
     at lambda_method(Closure) 
     at Moq.Mock.GetInterceptor(Expression fluentExpression, Mock mock) 
     at Moq.Mock.<>c__DisplayClass57_0`2.<SetupGet>b__0() 
+0

Thêm các thành phần khác vào project.json bắt đầu bằng "Microsoft.Extensions.Logging.TraceSource"? –

Trả lời

29

Edit: thủ thuật này không còn cần thiết với Moq > 4.6.38-alpha:

"dependencies" { 
    "Moq": "4.6.38-alpha" 
} 

Lỗi này là có thể do sự kiện System.Diagnostics.TraceSource không được tham chiếu trực tiếp bởi gói moq và do đó không được nhập quá cảnh trong dự án của bạn. Để làm việc xung quanh giới hạn này, bạn có thể tham khảo một cách rõ ràng System.Diagnostics.TraceSource gói:

Đây là cách chúng ta sử dụng nó trong dự án của chúng tôi xác nhận OAuth2 kiểm tra trung gian, chạy trên cả hai NET Desktop và NET Core:

{ 
    "buildOptions": { 
    "warningsAsErrors": true 
    }, 

    "dependencies": { 
    "AspNet.Security.OAuth.Validation": { "target": "project" }, 
    "dotnet-test-xunit": "1.0.0-rc2-build10015", 
    "Microsoft.AspNetCore.TestHost": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final", 
    "Newtonsoft.Json": "8.0.3", 
    "xunit": "2.1.0" 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "dependencies": { 
     "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0-rc2-3002702" }, 
     "moq.netcore": "4.4.0-beta8", 
     "System.Diagnostics.TraceSource": "4.0.0-rc2-24027" 
     }, 

     "imports": [ 
     "dnxcore50", 
     "portable-net451+win8" 
     ] 
    }, 

    "net451": { 
     "dependencies": { 
     "Microsoft.NETCore.Platforms": "1.0.1-rc2-24027", 
     "Moq": "4.2.1312.1622" 
     } 
    } 
    }, 

    "testRunner": "xunit" 
} 

https://github.com/aspnet-contrib/AspNet.Security.OAuth.Extensions/blob/master/test/AspNet.Security.OAuth.Validation.Tests/project.json#L21

+0

Hmm ... Tôi đã thử System.Diagnostics, nhưng điều này có ý nghĩa. Có vẻ hơi kỳ lạ, nhưng tôi sẽ viết nó cho Moq đang trong giai đoạn thử nghiệm. Cảm ơn đã giúp đỡ. –

+1

System.Diagnostics.TraceSource có thể được tìm thấy trong Nuget Package Manager là Include prerelease được chọn. –

+1

Đã được chỉnh sửa để đề cập rằng mẹo này không còn cần thiết với Moq 4.6.38-alpha nữa. – Pinpoint

Các vấn đề liên quan