Próbuję swoich sił w rozwoju opartym na zachowaniu i po drugie, zgaduję, że mój projekt został napisany. To mój pierwszy projekt typu greenfield i może to być po prostu mój brak doświadczenia. W każdym razie, tutaj jest prosta specyfikacja dla klasy, którą piszę. Jest napisany w NUnit w stylu BDD, zamiast używać dedykowanej struktury opartej na zachowaniu. Dzieje się tak dlatego, że celem projektu jest .NET 2.0 i wydaje się, że wszystkie środowiska BDD objęły środowisko .NET 3.5.Czy to jest kiepski projekt?
[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();
}
}
Żaden z interfejsów używanych przez MainPresenter nie ma jeszcze żadnych prawdziwych implementacji. AccountService będzie odpowiedzialny za tworzenie nowych kont. Istnieje wiele implementacji IAccount zdefiniowanych jako osobne wtyczki. W środowisku uruchomieniowym, jeśli jest ich więcej niż jeden, użytkownik zostanie poproszony o wybranie typu konta do utworzenia. W przeciwnym razie AccountService po prostu utworzy konto.
Jedną z rzeczy, która mnie niepokoi, jest to, jak wiele mocków jest wymaganych do napisania pojedynczej specyfikacji/testu. Czy to tylko efekt uboczny używania BDD, czy też podchodzę do tego w niewłaściwy sposób?
[Aktualizacja]
Oto aktualna realizacja MainPresenter.AddAccount
public void AddAccount()
{
IAccount account;
if (AccountService.AccountTypes.Count == 1)
{
account = AccountService.Create();
}
_view.Accounts.Add(account);
}
wszelkie wskazówki, sugestie lub alternatywy mile widziane.
Kilka dobrych porad tutaj +1 –