質問

私のユニットテストで1つは、MVCプロジェクトからすべてのコントローラータイプを取得し、ベースコントローラーから継承することを確認するLINQクエリを開発しています。

var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);

このリストからBasecontrollerオブジェクトを削除するにはどうすればよいですか?私はいくつかのことを試しましたが、常にBasecontrollerから継承しないすべてのコントローラーをリストから削除します。

これがユニットテストです

[Fact]
    public void All_Controllers_Inherit_From_BaseController()
    {
        var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);

        foreach (var controller in controllers)
        {
            Assert.True(controller.BaseType == typeof(BaseController));
        }
    }

ありがとう!

役に立ちましたか?

解決

さて、2つのオプションが思い浮かびます:

  • 明示的に「削除」 BaseController 使用 Except:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Except(new[] { typeof(BaseController) })
                              .Where(typeof(IController).IsAssignableFrom);
    
  • コンクリートタイプのみを考慮してください。私が想定し BaseController 要約です:

    var controllers = typeof(MvcApplication).Assembly
                              .GetTypes()
                              .Where(type => !type.IsAbstract)
                              .Where(typeof(IController).IsAssignableFrom);
    
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top