Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VS2012 & TFS2012 Unit Test major issues

We are using VS2012 and TFS2012 and write unit tests for our code. We want to report code coverage, and also using .config files in our unit tests for test appsettings, and also some other settings for logging, MS Enterprise library settings etc. etc.


App.config not working in new test framework

New test framework of MS should be great, but to me it is not so great at all. How I'm i suppose to set some basic configuration in config files, when the new framework does not use config files anymore?

We had a problem with mixed mode dlls, and found a fix: adding

<startup useLegacyV2RuntimeActivationPolicy="true"> 

to the app.config. But this did not work for our unit test project. Becuase config files are not there anymore. Searching the internet came up with a solution

'Problems with .Net 2.0 Mixed Mode Assemblies inside Visual Studio .Net 4.5 Test Projects'

This means editing a file of Visual Studio 11 itself in the program files directory, not a great solution i think....

And how about some basic appsetting? How am I supposed to set this?


Do not use the .testSettings file

Using the old .testsettings file is also not recommended by MS, becuase then the old test framework is used. And if I use the .testsettings file, i cannot setup Code Coverage on my tfs2012 build service.

Another issue is that we have code that need a dll (system.data.sqlite.dll), but only at runtime the unit test code needs this dll. So a reference is not needed. We fixed this by using the Deployment tab on the testsettings file. But in the new framework, you should not use the testsettings file. You have the [deploymentitem] attribute if you need files. But the deploymentitem attribute can only be used on a [testmethod] not on a [testinitialize] or [assemblyinitialize] method. But our code needs the dll in the [testinitialize] method. So there is no way to get the dll in place.

Just copy it with File.Copy in the [assemblyinitialize] (or testinitialize) method does not work.

Adding the dll as file to the project, and set the 'copy to output directory' to 'Copy Always' as mentioned in 'Configuring Unit Tests by using a .runsettings File' also does not work at all.

The (really not great) solution for this is to add the dll as a reference, then instantiate a class and do nothting with it. This way the dll is needed otherwise it is not building, and thus the dll will deploy itself to the right directories.


how to solve my problem(s)??? - I want to use config files in my unit test. - I want to deploy some files that are neede in the 'assemblyinitialise' and/or 'classinitialize' methods. - I want Code Coverage on my TFS2012 nightly build enabled.

like image 943
Dennis Avatar asked Oct 24 '12 12:10

Dennis


People also ask

What is VS2012?

Visual Studio 2012 is the tool to develop applications for this new generation of tablet devices -- both Windows 8 x86 devices and the new Windows RT ARM devices. Visual Studio 2012 lets you create Windows 8 applications using a variety of languages: C++

Is Visual Studio 2012 free?

It is part from code editor / ide category and is licensed as shareware for Windows 32-bit and 64-bit platform and can be used as a free trial until the trial period will end. The Visual Studio 2012 demo is available to all software users as a free download with potential restrictions compared with the full version.

What Msvc means?

MSVC stands for Microsoft Visual C++, an IDE (integrated development environment) for the C and C++ programming languages. It is a tool for writing and debugging C, C++, and C# code, most notably code written for Microsoft Windows, the . NET Framework or DirectX.

What is Visual Studio used for?

The Visual Studio IDE is a creative launching pad that you can use to edit, debug, and build code, and then publish an app.


1 Answers

a) App.config not working in new test framework

This should still work. What I think is missing in this case is that this .config file is not being copied with your test dll. Could you please set this as a deployment item and try again?

b) Do not use the .testSettings file

  • .testsettings and code coverage. Setting up code coverage with the .testsettings file IS still supported in VS 2012 build. You simply need to select the mstest 2010 test runner and specify your .testsettings file in your build definition

If you dont have anything except code coverage settings in the .testsettings file then you can easily migrate to the 2012 test runner and select "enable code coverage" in the drop down items

  • copying a file required by test initalize You could do this via the .testsettings file or you can have a post-build file copy task. It is pretty straight forward to do so and has no impact on anything else. Using the "copy to output directory = copy always" does work. Please try it with a sample solution and see if you can narrow down on why this does not work on your setup.
like image 106
allen Avatar answered Sep 30 '22 12:09

allen