Создание Системы. Сеть. Кэширование. Объект кэша в модульном тесте

Проблема в if choice in POSITIVES. Ваша переменная choice всегда указывает на строку "\nPlay again? Y/N: ", и выбор, который предоставляет игрок, на самом деле никогда не «записывается».

Чтобы это исправить, вы должны

  1. Сохранить ответ игрока, когда вы звоните input(choice) - то есть, player_choice = input(choice).
  2. Проверка по этой переменной, то есть if player_choice in POSITIVES
9
задан Matthew Murdoch 5 January 2010 в 16:41
поделиться

3 ответа

Когда я столкнулся с этим видом проблемы (где рассматриваемый класс не реализует интерфейс), я часто заканчиваю тем, что писал обертку со связанным интерфейсом вокруг рассматриваемого класса. Затем я использую свою обертку в моем коде. Для модульных тестов я вручаю насмешке обертку и вставляю мой собственный фиктивный объект в него.

Конечно, если платформа насмешки работает, то используйте ее вместо этого. Мой опыт состоит в том, что все платформы насмешки имеют некоторые проблемы с различными классами.NET.

public interface ICacheWrapper
{
   ...methods to support
}

public class CacheWrapper : ICacheWrapper
{
    private System.Web.Caching.Cache cache;
    public CacheWrapper( System.Web.Caching.Cache cache )
    {
        this.cache = cache;
    }

    ... implement methods using cache ...
}

public class MockCacheWrapper : ICacheWrapper
{
    private MockCache cache;
    public MockCacheWrapper( MockCache cache )
    {
        this.cache = cache;
    }

    ... implement methods using mock cache...
}

public class MockCache
{
     ... implement ways to set mock values and retrieve them...
}

[Test]
public void CachingTest()
{
    ... set up omitted...

    ICacheWrapper wrapper = new MockCacheWrapper( new MockCache() );

    CacheManager manager = new CacheManager( wrapper );

    manager.Insert(item,value);

    Assert.AreEqual( value, manager[item] );
}

Реальный код

...

CacheManager manager = new CacheManager( new CacheWrapper( HttpContext.Current.Cache ));

manager.Add(item,value);

...
8
ответ дан 4 December 2019 в 20:25
поделиться

Я думаю, что Ваш лучший выбор состоял бы в том, чтобы использовать фиктивный объект (изучите Насмешки Носорога).

2
ответ дан 4 December 2019 в 20:25
поделиться

Очень полезный инструмент для унаследованного кода поблочного тестирования является Изолятором TypeMock. Это позволит, Вы для обхода кэша возражаете полностью, говоря этому дразнить тот класс и любые вызовы метода, которые Вы находите проблематичными. В отличие от других ложных платформ, TypeMock использует отражение для прерывания тех вызовов метода, которые Вы говорите этому дразнить за Вас так, что Вы не должны иметь дело с громоздкими обертками.

TypeMock является коммерческим продуктом, но он имеет бесплатные версии для проектов с открытым исходным кодом. Они раньше имели "общественный" выпуск, который был однопользовательской лицензией, но я не знаю, предлагается ли это все еще.

1
ответ дан 4 December 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: