https://github.com/networm/ncrunchadapterforunity
Fix NCrunch didn't work in project generated by Unity.
https://github.com/networm/ncrunchadapterforunity
Last synced: about 1 year ago
JSON representation
Fix NCrunch didn't work in project generated by Unity.
- Host: GitHub
- URL: https://github.com/networm/ncrunchadapterforunity
- Owner: networm
- License: mit
- Created: 2017-10-04T15:42:10.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-11-11T07:07:02.000Z (over 8 years ago)
- Last Synced: 2025-04-12T06:13:37.394Z (about 1 year ago)
- Language: C#
- Size: 226 KB
- Stars: 7
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NCrunchAdapterForUnity
Fix NCrunch didn't work in project generated by Unity.
## Introduction
When enabled NCrunch in project generated by Unity, after initializing the status in `Tests` window would become `Analysis failed` and log message is:
```
An error occurred while analysing this project after it was built: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidCastException: Unable to cast object of type 'nCrunch.Module.NUnit3.Integration.NUnit3CallbackProxy' to type 'System.Web.UI.ICallbackEventHandler'.
at NUnit.Framework.Api.FrameworkController.LoadTestsAction..ctor(FrameworkController controller, Object handler)
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle._InvokeConstructor(Object[] args, SignatureStruct& signature, IntPtr declaringType)
at System.RuntimeMethodHandle.InvokeConstructor(Object[] args, SignatureStruct signature, RuntimeTypeHandle declaringType)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at nCrunch.Module.NUnit3.Integration.FrameworkController.LoadTests(INUnit3CallbackHandler handler)
at nCrunch.Module.NUnit3.Integration.NUnit3FrameworkInteractor.b__7_0()
at nCrunch.Common.PerformanceTracking.PerfTracker.TrackActivity(String name, Action activity)
at nCrunch.Common.PerformanceTracking.PerfTracker.TryTrackActivity(String name, Action activity)
at nCrunch.Module.NUnit3.Integration.NUnit3FrameworkInteractor.prepareFramework(DynamicProxy[] dynamicProxies)
at nCrunch.Module.NUnit3.Integration.NUnit3FrameworkInteractor..ctor(ReflectedAssembly assembly, IList`1 referencedAssemblyFilePaths, ComponentUniqueName testComponentUniqueName, DynamicProxy[] dynamicProxies)
at nCrunch.Module.NUnit3.Integration.NUnit3FrameworkRuntimeEnvironment.FindFrameworkTestsInAssembly(ReflectedAssembly assembly, FilePath assemblyFilePath, IList`1 referencedAssemblyFilePaths, ComponentUniqueName testComponentUniqueName, PlatformType platformType, DynamicProxy[] dynamicProxies)
at nCrunch.TestExecution.TestFinder..()
at nCrunch.Common.PerformanceTracking.PerfTracker.TrackActivity(String name, Action activity)
at nCrunch.TestExecution.TestFinder..()
at nCrunch.Common.PerformanceTracking.PerfTracker.TrackActivity(String name, Action activity)
at nCrunch.TestExecution.TestFinder.FindTestsForFrameworks(ReflectedAssembly assembly, FilePath assemblyFilePath, IList`1 referencedAssemblyFilePaths, DescribedTestFrameworkDiscoverer[] describedDiscoverers, ComponentUniqueName testComponentUniqueName, PlatformType platformType, DynamicProxy[] dynamicProxies)
at nCrunch.TestExecution.RemoteTaskRunner.AnalyseAssembly(DescribedTestFrameworkDiscoverer[] applicableFrameworks, ComponentUniqueName testComponentUniqueName, PerfTracker perfTracker)
```
The reason is Unity customed NUnit 3.5.0 dll which had critical code that was fundamentally incompatible with the normal NUnit API.
NCrunch developer has explaned it at [Build failed on Unity project - Build/Test Issues - NCrunch Forum](http://forum.ncrunch.net/yaf_postsm11307_Build-failed-on-Unity-project.aspx#post11307).
The Unity customed NUnit 3.5.0 dll is at path `C:\Program Files\Unity\Editor\Data\UnityExtensions\Unity\TestRunner\net35\unity-custom\nunit.framework.dll`
## Solution
Change reference from Unity customed NUnit dll to NUnit official dll in csharp project.
## Environment
- NCrunch 3.11.0.9
- Unity 2017.1.1f1
- Visual Studio Community 2017 15.3.5
These are release versions and update-to-date until 2017/10/04.
## Usage
1. Clone repository into `Assets/Plugins/Editor` directory.
2. Click menu `Assets` > `Open C# Project` to open Visual Studio.
Job done! You will notice that NCrunch works normally.
Note: `External Script Editor` should be `Visual Studio` to make Unity generate project compatible with Visual Studio.
Note: Use this adapter wouldn't break `Test Runner` in Unity. You could still use `Test Runner` run Unity related tests at the same time. Reference in project only affects behaviour in Visual Studio.
## Inside
1. `Open C# Project` then Unity will regenerate project if detect changes, then Visual Studio is opened after that `OnGeneratedCSProjectFiles()` is called. So if we change project in this callback, Visual Studio will prompt solution has changed and do you want to reload it everytime you `Open C# Project`. It's not good.
2. So I change to use method provided by `Visual Studio Tools for Unity` - `ProjectFilesGenerator.ProjectFileGeneration`. Change project in this callback will not cause solution prompt reload.
3. Unity use customed NUnit 3.5.0, so we use the same version to get best compatibility.
## Library
[NUnit](http://nunit.org/) - v3.5.0 - [MIT License](http://nunit.org/nuget/nunit3-license.txt)
## License
[MIT License](LICENSE)
## Reference
1. [Build failed on Unity project - Build/Test Issues - NCrunch Forum](http://forum.ncrunch.net/yaf_postsm11307_Build-failed-on-Unity-project.aspx#post11307)
2. [Customize Project Files Created by VSTU | Microsoft Docs](https://docs.microsoft.com/en-us/visualstudio/cross-platform/customize-project-files-created-by-vstu)