私はビヘイビア駆動の開発を試みていますが、書いているときに自分のデザインを二番目に推測していることに気づきました。これは私の最初のグリーンフィールド プロジェクトであり、私の経験不足によるものかもしれません。とにかく、これは私が書いているクラスの簡単な仕様です。専用の動作駆動型フレームワークを使用する代わりに、BDD スタイルの NUnit で記述されています。これは、プロジェクトが .NET 2.0 をターゲットにしており、すべての BDD フレームワークが .NET 3.5 を採用しているように見えるためです。
[TestFixture]
public class WhenUserAddsAccount
{
private DynamicMock _mockMainView;
private IMainView _mainView;
private DynamicMock _mockAccountService;
private IAccountService _accountService;
private DynamicMock _mockAccount;
private IAccount _account;
[SetUp]
public void Setup()
{
_mockMainView = new DynamicMock(typeof(IMainView));
_mainView = (IMainView) _mockMainView.MockInstance;
_mockAccountService = new DynamicMock(typeof(IAccountService));
_accountService = (IAccountService) _mockAccountService.MockInstance;
_mockAccount = new DynamicMock(typeof(IAccount));
_account = (IAccount)_mockAccount.MockInstance;
}
[Test]
public void ShouldCreateNewAccount()
{
_mockAccountService.ExpectAndReturn("Create", _account);
MainPresenter mainPresenter = new MainPresenter(_mainView, _accountService);
mainPresenter.AddAccount();
_mockAccountService.Verify();
}
}
MainPresenter で使用されるインターフェイスには、まだ実際の実装はありません。AccountService は、新しいアカウントの作成を担当します。個別のプラグインとして定義された IAccount の複数の実装が存在する可能性があります。実行時に複数のアカウントがある場合、ユーザーは作成するアカウントの種類を選択するように求められます。それ以外の場合、AccountService は単にアカウントを作成します。
私が不安に思っていることの 1 つは、1 つの仕様/テストを作成するだけで、いくつのモックが必要になるかということです。これはBDDを使用することの単なる副作用ですか、それとも間違った方法で進んでいますか?
[アップデート]
MainPresenter.AddAccount の現在の実装は次のとおりです。
public void AddAccount()
{
IAccount account;
if (AccountService.AccountTypes.Count == 1)
{
account = AccountService.Create();
}
_view.Accounts.Add(account);
}
ヒント、提案、または代替案を歓迎します。