Иногда самое лучшее, что нужно сделать, это написать минимальный код, который вы можете выполнить, чтобы пройти тесты. Это поможет вам задуматься о своих тестах и гарантирует, что вы пишете полезные тесты.
Как и все, ваш тест требует от вас нескольких вещей. Вам нужно реализовать метод Create
JarOfSweetsCreator
, чтобы вернуть что-то, что реализует IJarOfSweets
, и для возврата объекта требуется возвращенный объект 30 при проверке его свойства Count
.
Первым шагом является создание конкретного класса JarOfSweets
, который реализует интерфейс. Метод, который нужно делать что-либо является Count
собственности, так что класс будет выглядеть следующим образом:
public class JarOfSweets : IJarOfSweets {
public void Shuffle()
{
throw new NotImplementedException();
}
public ISweet TakeSweetFromJar()
{
throw new NotImplementedException();
}
int IReadOnlyCollection<ISweet>.Count
{
get { return 30; }
}
IEnumerator<ISweet> IEnumerable<ISweet>.GetEnumerator()
{
throw new NotImplementedException();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
}
Затем вам необходимо обновить создатель вернуть новый экземпляр класса JarOfSweets
.
public class JarOfSweetsCreator : IJarOfSweetsCreator
{
public IJarOfSweets Create()
{
return new JarOfSweets();
}
}
Это минимум, что должно быть сделано, чтобы получить тест пройти. На самом деле, вы, скорее всего, захотите сделать немного больше с продвижением кода, поскольку вы пишете больше тестов/пишете код, чтобы пройти тесты.
Как сказал Джон в комментариях, ReadOnlyCollection
, просто сообщает вам, что JarOfSweets
необходимо реализовать определенные функции (получить счетчик + получить перечисление). Это не означает, что коллекция действительно должна быть readonly. Вы можете реализовать его, используя любой из встроенных типов коллекций, или можете написать свой собственный.
Важно помнить, что, когда вы знаете конкретный тип, реализующий интерфейс, вы также имеете доступ к методам, не определенным на интерфейсе. Итак, в вашем JarOfSweetsCreator
, например, ему нужно будет узнать фактический тип реализации JarOfSweets
, а не только интерфейс, чтобы его создать. Это означает, что метод Create
можно вызвать другие методы в вашей базовой коллекции, например метод Add
.Таким образом, если предположить, что у вас есть Sweet
класс, который реализует ISweet
вы могли бы в конечном итоге с создателем, который выглядит немного больше, как это:
public class JarOfSweetsCreator : IJarOfSweetsCreator
{
public IJarOfSweets Create()
{
var jar = new JarOfSweets();
for (int i = 0; i < 30; i++)
{
jar.Add(new Sweet());
}
return jar;
}
}
, а затем в вашем JarOfSweets
, он может просто использовать List<T>
и делегировать соответствующие функции:
public class JarOfSweets : IJarOfSweets{
public List<ISweet> _list = new List<ISweet>();
public void Shuffle()
{
throw new NotImplementedException();
}
public ISweet TakeSweetFromJar()
{
throw new NotImplementedException();
}
public void Add(Sweet sweet)
{
_list.Add(sweet);
}
public int Count
{
get { return _list.Count; }
}
public IEnumerator<ISweet> GetEnumerator()
{
return _list.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _list.GetEnumerator();
}
}
«Является ли IJarOfSweets используемого как коллекция» - да, именно поэтому он реализует '' IReadOnlyCollection ... это означало, которые будут использоваться в качестве коллекции конфет, хотя как ни странно с 'методом Shuffle' также. Честно говоря, если у вас возникли проблемы с этим, лучше спросить у вашего учителя более подробную информацию, так как это говорит о том, что вы, возможно, пропустили некоторые концепции. –
Хорошо, но тогда как бы мне создать 30, если коллекция читается только? –
IReadOnlyCollection - это плохое имя - интерфейс только предоставляет членам возможность читать коллекцию, а не мутировать ее. –