Creation of a new instance of generic type parameter not getting code coverage

c#, visual-studio-2008

Solution

Change your constraint to force the `TExample` to be a class:

public abstract IExample CreateEntity<TExample>() where TExample : class, IExample, new();

If you run your compiled code through a tool like ILSpy, you will see the block that is not getting coverage:

TExample temp = (default(TExample) == null) ? Activator.CreateInstance<TExample>() : default(TExample);
return temp;

It is performing a check to see if the type passed to the generic was a reference type or a value type. By forcing it to be a class, this check will be removed. Read more on the default keyword here: http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx

Another way to get complete code coverage would be to use a struct that implements `IExample`:

public struct S1 : IExample
{ 
}

And then add this test:

[TestMethod]
public void StructTest()
{
    Class1 ex = new Class1();
    ex.CreateEntity<S1>();
}

Problem

I've run my code through code coverage and the line below shows 1 block as not covered. Can anyone tell me which part of that line isn't executing? An Example to play with: ``` public abstract class Base { public abstract IExample CreateEntity<TExample>() where TExample : IExample, new(); } public class Class1 : Base { public override IExample CreateEntity<TExample>() { IExample temp = new TExample(); return temp; } } public interface IExample { } public class TEx : IExample { } ``` and the test method ``` [TestMethod] public void TestMethod1() { Class1 ex = new Class1(); ex.CreateEntity<TEx>(); } ```

Original source