Конструктор по умолчанию вызывает конструктор с параметром с новым экземпляром определенного типа класса BlogRepositoryBase. EntityFrameworkBlogRepository должен быть производным от этого базового класса. Причина, по которой вы указываете базовый класс (я бы использовал интерфейс, но я отвлекся), заключается в том, что в ваших тестах вы можете указать другой тип репозитория, который, возможно, даже не подключается к базе данных путем создания экземпляров. это напрямую через конструктор не по умолчанию. Фреймворк всегда будет использовать конструктор по умолчанию, поэтому вы должны как предоставить его, так и обеспечить подходящую реализацию репозитория, используя его.
FWIW - это то, как я бы это сделал (в C # - мой мозг еще недостаточно хорошо работает для перевода на VB).
protected IBlogRepository Repository { get; set; }
public BlogController() : this( null ) {}
public BlogController( IBlogRepository repository )
{
this.Repository = repository ?? new EntityFrameworkBlogRepository();
...
}
Проверено как
public void Test()
{
var repository = MockRepository.GenerateMock<IBlogRepository>();
var controller = new BlogController( repository );
...
repository.VerifyAllExpectations();
}