FreeBSD: MonoDevelop to run NUnit tests
2013-07-23 21:51:23 Moscow time
I have spent some hours to figure out why MonoDevelop (4.0.9, bsd-sharp) is unable to run NUnit tests on FreeBSD.
The symptom: the MonoDevelop IDE tries to run the tests and after some time interval shows that no tests were run and there are no test results.
Here is the listing of the test result (test-results
directory of the test project):
<?xml version="1.0" encoding="utf-8"?>
<TestRecord xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Results>
<UnitTestResult>
<TestDate>2013-07-23T09:08:56</TestDate>
<Status>Failure</Status>
<Passed>0</Passed>
<Errors>0</Errors>
<Failures>0</Failures>
<Inconclusive>0</Inconclusive>
<NotRunnable>0</NotRunnable>
<Skipped>0</Skipped>
<Ignored>0</Ignored>
<Time />
<Message>Couldn't create a remote process.</Message>
<StackTrace> at MonoDevelop.Core.Execution.ProcessHostController.CreateInstance (System.String assemblyPath, System.String typeName, System.String[] addins, IList`1 userAssemblyPaths) [0x00064] in /usr/tmp/usr/ports/devel/monodevelop/work/monodevelop-4.0.9/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessHostController.cs:225
at (wrapper remoting-invoke-with-check) MonoDevelop.Core.Execution.ProcessHostController:CreateInstance (string,string,string[],System.Collections.Generic.IList`1<string>)
at MonoDevelop.Core.Execution.ProcessService.CreateExternalProcessObject (System.Type type, IExecutionHandler executionHandler, IList`1 userAssemblyPaths) [0x0002f] in /usr/tmp/usr/ports/devel/monodevelop/work/monodevelop-4.0.9/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessService.cs:343
at MonoDevelop.NUnit.NUnitAssemblyTestSuite.RunUnitTest (MonoDevelop.NUnit.UnitTest test, System.String suiteName, System.String pathName, System.String testName, MonoDevelop.NUnit.TestContext testContext) [0x0003e] in /usr/tmp/usr/ports/devel/monodevelop/work/monodevelop-4.0.9/src/addins/NUnit/Services/NUnitAssemblyTestSuite.cs:387
at MonoDevelop.NUnit.NUnitAssemblyTestSuite.OnRun (MonoDevelop.NUnit.TestContext testContext) [0x00001] in /usr/tmp/usr/ports/devel/monodevelop/work/monodevelop-4.0.9/src/addins/NUnit/Services/NUnitAssemblyTestSuite.cs:356
at MonoDevelop.NUnit.UnitTest.Run (MonoDevelop.NUnit.TestContext testContext) [0x0001e] in /usr/tmp/usr/ports/devel/monodevelop/work/monodevelop-4.0.9/src/addins/NUnit/Services/UnitTest.cs:361 </StackTrace>
</UnitTestResult>
</Results>
<Tests />
</TestRecord>
Furthermore, attempt to run the tests manually leads to the following output:
$ nunit-console HelloTests.dll -xmlConsole
NUnit version 2.4.8
Copyright (C) 2002-2007 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Unix 9.1.4.0
CLR Version: 2.0.50727.1433 ( 3.1.2 (tarball Tue Jul 23 19:49:13 UTC 2013) )
Unhandled Exception:
System.ArgumentOutOfRangeException: Index is less than 0 or more than or equal to the list count.
Parameter name: index
0
at System.Collections.ArrayList.ThrowNewArgumentOutOfRangeException (System.String name, System.Object actual, System.String message) [0x00000] in /usr/tmp/usr/ports/lang/mono/work/mono-3.1.2/mcs/class/corlib/System.Collections/ArrayList.cs:3244
at System.Collections.ArrayList.get_Item (Int32 index) [0x00013] in /usr/tmp/usr/ports/lang/mono/work/mono-3.1.2/mcs/class/corlib/System.Collections/ArrayList.cs:2635
at System.Diagnostics.ProcessModuleCollection.get_Item (Int32 index) [0x00000] in /usr/tmp/usr/ports/lang/mono/work/mono-3.1.2/mcs/class/System/System.Diagnostics/ProcessModuleCollection.cs:64
at System.Diagnostics.Process.get_MainModule () [0x00000] in /usr/tmp/usr/ports/lang/mono/work/mono-3.1.2/mcs/class/System/System.Diagnostics/Process.cs:228
at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_MainModule ()
at NUnit.Util.DomainManager.CreateDomain (NUnit.Core.TestPackage package) [0x0019f] in /usr/tmp/usr/ports/lang/mono/work/mono-3.1.2/mcs/nunit24/ClientUtilities/util/Services/DomainManager.cs:105
at NUnit.Util.TestDomain.Load (NUnit.Core.TestPackage package) [0x00011] in /usr/tmp/usr/ports/lang/mono/work/mono-3.1.2/mcs/nunit24/ClientUtilities/util/TestDomain.cs:52
Analysis:
System.Diagnostics.Process
class implementation for Linux-based operating system uses procfs (/proc).
procfs is not enabled for FreeBSD by default.
Solution:
Mount procfs
using /etc/fstab
(reboot to apply):
proc /proc procfs rw 0 0
or mount procfs
right now (without reboot):
mount -t procfs proc /proc
Since now MonoDevelop runs NUnit tests slightly.
P.S. The same issue found here: FreeBSD, Mono y FireBird .Net Provider.
Tags: C# freebsd MonoDevelop NUnit