VSTS Code Coverage mit nativen C++ Projekt und C# Projekt im Mix


Die Frage bekomme ich recht häufig und habe daher mal ein Demo gebaut, um zu zeigen wie es geht. Meine Demo Solution besteht aus 3 Projekten:


CodeCoverageWithC (C# Lib, ruft die native C++ Lib via Interop)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace CodeCoverageWithC
{
public class Class1
{
//Import der nativen Function Add(int n1, int n2)
[DllImport(“CalcLib.dll”, CharSet=CharSet.Unicode,EntryPoint=“#1”)]
public static extern int Add(int n1,int n2);

public int calcValues(int value1, int value2)
{
return Add(value1,value2);
}
}
}


CalcLib (native C++, implementiert die Add Function, welche exportiert werden muss)


// CalcLib.h :

class CalcLib
{
public:
CalcLib(void);
~CalcLib(void);
__declspec(dllexport) int Add(int n1, int n2);
};
// CalcLib.cpp : Defines the exported functions for the DLL application.
//
#include “StdAfx.h”
#include “CalcLib.h”

CalcLib::CalcLib(void){}
CalcLib::~CalcLib(void){}

int CalcLib::Add(int n1, int n2)
{
return n1 + n2;
}


CalcTest(C# Test Project, welches den Unittest implementiert, der calcValues() testet)

[TestMethod()]
public void calcValuesTest()
{
Class1 target = new Class1();
int n1 = 1;
int n2 = 2;
int expected = 3; // Sollte passen oder? 🙂
int actual;
actual = target.calcValues(n1, n2);
Assert.AreEqual(expected, actual);
}

Einfacher geht’s wohl nicht…


Wenn ich jetzt den UnitTest ausführe möchte ich die CodeCoverage beider Dll’s haben. Also in der Testrunconfig die beiden Dlls für CodeCoverage konfigurieren:


image 

Wichtig: Damit die native CalcLib instrumentiert werden kann, muss der Linker Switch /PROFILE gesetzt sein:


image 


So jetzt den UnitTests ausführen und CodeCoverage anschauen. Die 100% Coverage kommen von der überagenden Komplexität des Codes 🙂


image


Die Solution gibt’s hier:


Viel Spass


Chris

Skip to main content