我知道在您实际编写代码之后编写测试并不是那么好。我是单元测试新手,觉得单元测试可以带来很多好处,所以我痴迷于尽可能多地覆盖的想法。
例如,让我们有这样的代码:
public class ProjectsPresenter : IProjectsViewObserver
{
    private readonly IProjectsView _view;
    private readonly IProjectsRepository _repository;
    public ProjectsPresenter(IProjectsRepository repository, IProjectsView view)
    {
        _view = view;
        _repository = repository;
        Start();
    }
    public void Start()
    {
        _view.projects = _repository.FetchAll();
        _view.AttachPresenter(this);
    }
}
所以看看上面的代码,你能回答我通常应该在上面的那段代码上写什么测试吗?
我正在对构造函数进行写入测试,以确保调用了存储库的 FetchAll 并在视图站点上调用了 AttachPresenter。
后编辑
这是我的视图界面:
public interface IProjectsView
{
    List<Project> projects { set; }
    Project project { set; }
    void AttachPresenter(IProjectsViewObserver projectsPresenter);
}
这是一个视图:
public partial class ProjectsForm : DockContent, IProjectsView
{
    private IProjectsViewObserver _presenter;
    public ProjectsForm()
    {
        InitializeComponent();
    }
    public Project project
    {
        set
        {
            listBoxProjects.SelectedItem = value;
        }
    }
    public List<Project> projects
    {
        set
        {
            listBoxProjects.Items.Clear();   
            if ((value != null) && (value.Count() > 0))
                listBoxProjects.Items.AddRange(value.ToArray());
        }
    }
    public void AttachPresenter(IProjectsViewObserver projectsPresenter)
    {
        if (projectsPresenter == null)
            throw new ArgumentNullException("projectsPresenter");
        _presenter = projectsPresenter;
    }
    private void listBoxProjects_SelectedValueChanged(object sender, EventArgs e)
    {
        if (_presenter != null)
            _presenter.SelectedProjectChanged((Project)listBoxProjects.SelectedItem);
    }
}
编辑后 #2
这就是我测试与存储库交互的方式。一切都顺利吗?
    [Test]
    public void ProjectsPresenter_RegularProjectsProcessing_ViewProjectsAreSetCorrectly()
    {
        // Arrange
        MockRepository mocks = new MockRepository();
        var view = mocks.StrictMock<IProjectsView>();
        var repository = mocks.StrictMock<IProjectsRepository>();
        List<Project> projList = new List<Project> {
            new Project { ID = 1, Name = "test1", CreateTimestamp = DateTime.Now },
            new Project { ID = 2, Name = "test2", CreateTimestamp = DateTime.Now }
        };
        Expect.Call(repository.FetchAll()).Return(projList);
        Expect.Call(view.projects = projList);
        Expect.Call(delegate { view.AttachPresenter(null); }).IgnoreArguments();
        mocks.ReplayAll();
        // Act
        ProjectsPresenter presenter = new ProjectsPresenter(repository, view);
        // Assert
        mocks.VerifyAll();            
    }