Tôi đang cố gắng phát triển hành vi theo hướng hành vi và tôi đang tìm kiếm bản thân mình khi đoán thiết kế của mình khi tôi đang viết nó. Đây là dự án greenfield đầu tiên của tôi và nó có thể chỉ là sự thiếu kinh nghiệm của tôi. Dù sao, đây là một thông số kỹ thuật đơn giản cho lớp tôi đang viết. Nó được viết bằng NUnit theo kiểu BDD thay vì sử dụng một khung điều khiển hành vi chuyên dụng. Điều này là do dự án nhắm mục tiêu .NET 2.0 và tất cả các khuôn khổ BDD dường như đã chấp nhận .NET 3.5.Đây có phải là thiết kế kém không?
[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();
}
}
Không có giao diện nào được sử dụng bởi MainPresenter có bất kỳ triển khai thực nào được nêu ra. AccountService sẽ chịu trách nhiệm tạo tài khoản mới. Có thể có nhiều triển khai IAccount được định nghĩa là các plugin riêng biệt. Khi chạy, nếu có nhiều hơn một người dùng thì người dùng sẽ được nhắc chọn loại tài khoản nào để tạo. Nếu không thì AccountService sẽ chỉ tạo một tài khoản.
Một trong những điều khiến tôi không thoải mái là cần bao nhiêu mocks để viết một thông số/thử nghiệm đơn lẻ. Đây có phải chỉ là một tác dụng phụ của việc sử dụng BDD hoặc tôi đang đi về điều này một cách sai lầm?
[Cập nhật]
Đây là việc thực hiện hiện tại của MainPresenter.AddAccount
public void AddAccount()
{
IAccount account;
if (AccountService.AccountTypes.Count == 1)
{
account = AccountService.Create();
}
_view.Accounts.Add(account);
}
Bất cứ lời khuyên, gợi ý hoặc thay thế chào đón.
Một số lời khuyên tốt ở đây +1 –