既存の 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 */ }
}