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