I have a small hosting class that works on a WinForms app. But it gives an InvalidProgramException when called from a NUnit test.<br><br>The test project is within the IronPython solution and I've referenced IronPython, IronPython.Modules and Microsoft.Scripting.<br>
<br>I'd like to know if other people were able to test hosting using NUnit.<br><br>Thanks.<br><br>**********<br> This is the error report:<br>**********<br>
<br>------ Test started: Assembly: HostingTest.dll ------<br><br>TestCase 'HostingTest.Class1.TestHosting'<br>failed: Microsoft.Scripting.InvalidImplementationException : Type 'IronPython.Runtime.PythonContext' doesn't provide a suitable public constructor or its implementation is faulty.<br>
----> System.TypeInitializationException : O inicializador de tipo de 'IronPython.Runtime.Importer' acionou uma exceção.<br> ----> System.InvalidProgramException : Common Language Runtime detectou um programa inválido.<br>
C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\Microsoft.Scripting\Utils\ReflectionUtils.cs(129,0): em Microsoft.Scripting.Utils.ReflectionUtils.CreateInstance[T](Type actualType, Object[] args)<br>
C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\Microsoft.Scripting\ScriptDomainManager.cs(276,0): em Microsoft.Scripting.ScriptDomainManager.LanguageRegistration.LoadLanguageContext(ScriptDomainManager manager)<br>
C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\Microsoft.Scripting\ScriptDomainManager.cs(387,0): em Microsoft.Scripting.ScriptDomainManager.TryGetLanguageContext(String languageId, LanguageContext& languageContext)<br>
C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\Microsoft.Scripting\ScriptDomainManager.cs(437,0): em Microsoft.Scripting.ScriptDomainManager.GetEngine(String languageId)<br> C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\Microsoft.Scripting\Hosting\ScriptEnvironment.cs(156,0): em Microsoft.Scripting.Hosting.ScriptEnvironment.GetEngine(String languageId)<br>
C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\HostingTest\Host.cs(11,0): em HostingTest.Host.Teste()<br> C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\HostingTest\Class1.cs(12,0): em HostingTest.Class1.TestHosting()<br>
--TypeInitializationException<br> em IronPython.Runtime.Importer..ctor(PythonContext context)<br> C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\IronPython\Runtime\PythonContext.cs(120,0): em IronPython.Runtime.PythonContext..ctor(ScriptDomainManager manager)<br>
--InvalidProgramException<br> em Microsoft.Scripting.RuntimeHelpers.CreateSimpleCallSite[T0,T1,T2,T3,T4,R]()<br> C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\IronPython\Runtime\Importer.cs(74,0): em IronPython.Runtime.Importer.MakeImportSite()<br>
C:\Temp\IronPython v2.0 Alpha 8\IronPython-2.0A8-Src\IronPython-2.0A8\Src\IronPython\Runtime\Importer.cs(49,0): em IronPython.Runtime.Importer..cctor()<br><br>0 passed, 1 failed, 0 skipped, took 2,11 seconds.<br><br>**********<br>
Class1.cs<br>**********<br>
using NUnit.Framework;<br><br>namespace HostingTest<br>{<br> [TestFixture]<br> public class Class1<br> {<br> [Test]<br> public void TestHosting()<br> {<br> Host host = new Host();<br>
string x = host.Test();<br> Assert.AreEqual("Hosting", x);<br> }<br> }<br>}<br><br>**********<br>Host.cs<br>
**********<br>
using Microsoft.Scripting;<br>using Microsoft.Scripting.Hosting;<br><br>namespace HostingTest<br>{<br> public class Host<br> {<br> public string Test()<br> {<br> IScriptEnvironment env = ScriptEnvironment.GetEnvironment();<br>
IScriptEngine pe = env.GetEngine("py");<br> IScriptScope scope = env.CreateScope();<br> SourceUnit script = pe.CreateScriptSourceFromString(@"<br>def Test():<br> return 'Hosting'<br>
", SourceCodeKind.Statements);<br> CompiledCode codigo = (CompiledCode)pe.Compile(script);<br> codigo.Execute(scope);<br> SourceUnit function = pe.CreateScriptSourceFromString("Test()");<br>
CompiledCode funcao = (CompiledCode)pe.Compile(function);<br> return funcao.Evaluate(scope).ToString();<br> }<br> }<br>}<br><br>