Así que copié el sample code desde la página de inicio de Moq casi textualmente, y estoy obteniendo una excepción de proxy de castillo.¿Por qué la excepción de inicializador de tipo 'Moq.Proxy.CastleProxyFactory' cuando se utiliza NET40-NoCastle?
Aquí está mi código (como una aplicación de consola para una muestra más fácil)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Moq;
namespace MoqTestConsole
{
public interface ILoveThisFramework
{
bool DownloadExists(string s);
}
class Program
{
static void Main(string[] args)
{
Mock<ILoveThisFramework> mock = new Mock<ILoveThisFramework>();
// WOW! No record/replay weirdness?! :)
mock.Setup(framework => framework.DownloadExists("2.0.0.0")).Returns(true);
// Hand mock.Object as a collaborator and exercise it,
// like calling methods on it...
ILoveThisFramework lovable = mock.Object;
bool download = lovable.DownloadExists("2.0.0.0");
// Verify that the given method was indeed called with the expected value
mock.Verify(framework => framework.DownloadExists("2.0.0.0"));
}
}
}
Todo compila bien, pero cuando se llama a mock.Object
se lanza la siguiente excepción.
System.TypeInitializationException was unhandled
Message=The type initializer for 'Moq.Mock`1' threw an exception.
Source=Moq
TypeName=Moq.Mock`1
StackTrace:
at Moq.Mock`1.<InitializeInstance>b__0() in d:\Code\moq\src\Source\Mock.Generic.cs:line 138
at Moq.PexProtector.Invoke(Action action) in d:\Code\moq\src\Source\PexProtector.cs:line 56
at Moq.Mock`1.InitializeInstance() in d:\Code\moq\src\Source\Mock.Generic.cs:line 136
at Moq.Mock`1.OnGetObject() in d:\Code\moq\src\Source\Mock.Generic.cs:line 153
at Moq.Mock.GetObject() in d:\Code\moq\src\Source\Mock.cs:line 152
at Moq.Mock.get_Object() in d:\Code\moq\src\Source\Mock.cs:line 147
at Moq.Mock`1.get_Object() in d:\Code\moq\src\Source\Mock.Generic.cs:line 131
at MoqTestConsole.Program.Main(String[] args) in C:\Projects\Test\MoqTestConsole\MoqTestConsole\Program.cs:line 25
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.TypeInitializationException
Message=The type initializer for 'Moq.Proxy.CastleProxyFactory' threw an exception.
Source=Moq
TypeName=Moq.Proxy.CastleProxyFactory
StackTrace:
at Moq.Proxy.CastleProxyFactory..ctor()
at Moq.Mock`1..cctor() in d:\Code\moq\src\Source\Mock.Generic.cs:line 54
InnerException: System.IO.FileNotFoundException
Message=Could not load file or assembly 'Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The system cannot find the file specified.
Source=Moq
FileName=Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
FusionLog==== Pre-bind state information ===
LOG: User = jsi-dev-001\jmacintyre
LOG: DisplayName = Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
(Fully-specified)
LOG: Appbase = file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core.DLL.
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core/Castle.Core.DLL.
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core.EXE.
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core/Castle.Core.EXE.
StackTrace:
at Moq.Proxy.CastleProxyFactory..cctor()
InnerException:
por lo que parece ser un componente Castillo proxy que le falta, pero estoy haciendo referencia al binario del directorio NET40-NoCastle
.
La última versión de Moq (Moq.4.0.10827)
Y yo soy nuevo en Moq, por lo que puede estar haciendo algo extremadamente denso.
Cometí el mismo error, no es el mejor nombre que he visto – Karsten
Hice exactamente lo mismo. El nombre del directorio falla, me temo. –
¡Lo que dijeron! :-) –