8

コード カバレッジを使用してコードを実行しましたが、以下の行は 1 ブロックがカバーされていないことを示しています。

その行のどの部分が実行されていないか誰か教えてもらえますか?

ここに画像の説明を入力

遊ぶ例:

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
{

}

および試験方法

    [TestMethod]
    public void TestMethod1()
    {
        Class1 ex = new Class1();
        ex.CreateEntity<TEx>();
    }
4

1 に答える 1

6

TExampleを強制的にクラスにするように制約を変更します。

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

コンパイルしたコードを ILSpy などのツールで実行すると、カバレッジが得られていないブロックが表示されます。

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

ジェネリックに渡された型が参照型か値型かを確認するためのチェックを実行しています。強制的にクラスにすることで、このチェックは外されます。デフォルトのキーワードについて詳しくは、http: //msdn.microsoft.com/en-us/library/xwth0h0d.aspxをご覧ください。

完全なコード カバレッジを取得する別の方法は、以下を実装する構造体を使用することIExampleです。

public struct S1 : IExample
{ 
}

次に、このテストを追加します。

[TestMethod]
public void StructTest()
{
    Class1 ex = new Class1();
    ex.CreateEntity<S1>();
}
于 2013-08-15T17:27:32.753 に答える