私は次のコードを持っています:
using System;
using NUnit.Framework;
using Rhino.Mocks;
public class A
{
}
public class B
{
}
public interface IStatementExecutor
{
void Exec(string statement);
}
public abstract class Foo<T>
{
private readonly IStatementExecutor _statementExecutor;
private readonly string _targetSegment;
protected Foo(IStatementExecutor statementExecutor, string targetSegment)
{
_statementExecutor = statementExecutor;
_targetSegment = targetSegment;
}
public void Update(T item)
{
_statementExecutor.Exec("sp_" + _targetSegment + "Update");
}
}
public class Bar : Foo<A>
{
public Bar(IStatementExecutor statementExecutor)
: base(statementExecutor, "ATable")
{
}
}
public class Baz : Foo<B>
{
public Baz(IStatementExecutor statementExecutor)
: base(statementExecutor, "BTable")
{
}
}
[TestFixture]
public class Foo_Tests
{
[Test]
public void Update_CallsStatementExecutorWithTableName()
{
const string tableName = "TestTable";
var mockStatementExecutor = MockRepository.GenerateMock<IStatementExecutor>();
mockStatementExecutor.Expect(m => m.Exec("sp_" + tableName + "Update"));
var sut = MockRepository.GeneratePartialMock<Foo<A>>(mockStatementExecutor, tableName);
var testModel = new A();
sut.Update(testModel);
mockStatementExecutor.AssertWasCalled(m => m.Exec("sp_" + tableName + "Update"));
}
}
基本クラスの単体テストはすでにありますFoo<T>
。Bar
基本クラスはすでにカバーされているので、派生クラスと。に対して同一のテストを記述したくありませんBaz
。
派生クラスで私が本当に気にかけているのは、正しい文字列target
が基本クラスに渡されることだけです。
派生クラスのカプセル化を壊したり、冗長な単体テストを記述したりせずに、これを単体テストする方法に苦労しています。
target
したがって、問題は、パラメータの派生クラスから基本クラスに正しい値が渡されることをテストするにはどうすればよいですか?
(答えが「compositionを使用する...」の場合は、上記から変更したコードサンプルを使用してバックアップしてください。
ありがとう!