0

既存の Web フォーム アプリケーションに単体テストを導入しています。Moq と Autofac を使用しています。コードの変更を最小限に抑えようとしていますが、単体テストを実装する必要があります。

つまり、プレゼンテーション アセンブリ、ビジネス レイヤー、およびデータ アクセス レイヤーがあります。私のビジネスレイヤーは次のようになります。

public class EmployeeBL
{
    public Employee SelectById(int id)
    {
        return new EmployeeDA().SelectById(id);
    }
}

My Data アクセスは次のようになります。

public class EmployeeDA
{
    // unitOfWork defined in the constructor

    public Employee SelectById(int id)
    {
        return unitOfWork.Employees.Where(e => e.id == id);
    }
}

Autofac の webforms アセンブリを使用すると、パブリック プロパティを宣言し、web.config 設定を指定して、HttpModule を介して依存関係を自動的に挿入できます。をテストするためにEmployeeBL、web.config に変更を加えEmployeeDA、プロパティとして宣言しました。

// Modified for testing
[InjectProperties]
public class EmployeeBL
{
    // public property to allow Autofac property injection
    public IEmployeeDA EmployeeDA { get; set; }

    public Employee SelectById(int id)
    {
        return EmployeeDA.SelectById(id);
    }
}

これは Web フォーム アプリケーションの実行には機能しますが、問題は、Web フォーム インスタンスとは別にビジネス レイヤーを単体テストする必要があることです。[InjectProperties]に属性を保持したいのですが、にそのプロパティを挿入するEmployeeBL方法をドキュメントで知ることができません。EmployeeDA

public class EmployeeBLTest
{
    private static IContainer { get; set; }

    [TestInitialize]
    public void Initialize()
    {
        var builder = new ContainerBuilder();

        // Use my fake employeeDA for testing
        builder.RegisterType<FakeEmployeeDA>().As<IEmployeeDA>();

        // Something magical happens 
    }

    [TestMethod]
    public void SelectByIdTest(int id) { /* testing stuff */ }

}
4

1 に答える 1

0

どうですか:

builder.RegisterType<EmployeeDA>().AsSelf().PropertiesAutowired();

ここを参照してください: http://code.google.com/p/autofac/wiki/PropertyInjection

于 2013-03-14T04:02:33.657 に答える