Как проверить исключение, которое выдается только тогда, когда системный путь неверен? - PullRequest
1 голос
/ 23 августа 2009

У меня есть следующий класс в C #, который создает объект из собственника .DLL, который требует лицензии в доступном каталоге при инициализации.

public CplexServices{
    private Cplex _cplex;
    public Cplex Cplex { get { return _cplex; } }
    public CplexServices()
    {
        try
        {
            _cplex = new Cplex();
        }
        catch
        {
            throw new Exception("Path or license file is wrong");
        }
    }
}

«new Cplex ()» может завершиться ошибкой, если системный путь Windows неверен или файл лицензии неверен. Я хочу написать тест для подтверждения правильности исключения, если путь и / или файл лицензии указаны неверно.

Как мне написать этот тест, не меняя путь или файл лицензии?

Ответы [ 3 ]

1 голос
/ 23 августа 2009

Вы можете использовать

string oldPath = Environment.GetEnvironmentVariable("PATH");
Environment.SetEnvironmentVariable("PATH", "MyBadPath");
// Do tests
Environment.SetEnvironmentVariable("PATH", oldPath);

Чтобы проверить проблему пути, укажите неверный путь. Чтобы проверить файл лицензии, укажите путь к тестовому каталогу, в котором содержится неверный файл лицензии.

1 голос
/ 23 августа 2009

Что вы тестируете? Я считаю, что вы проверяете, что путь обработки ошибок для вызова нового Cplex () является правильным.

public CplexServices()
{
    try
    {
        _cplex = new Cplex();
    }
    catch
    {
        throw new Exception("Path or license file is wrong");
    }
}

Вы не тестируете новый Cplex (), он выдает исключения, когда файл лицензии скорее отсутствует, вы тестируете, что , если выдает исключения, вы поступаете правильно. В этом случае это так тривиально правильно, что мне, вероятно, было бы все равно. Однако, если бы это было более сложным, например, серьезной обработкой восстановления, мы бы предпочли иметь возможность проверить это.

Подход, проход на фабрику.

public CplexServices(CplexFactory myFactory)
{
    try
    {
        _cplex = myFactory.makeCplex();
    }
    catch
    {
        throw new Exception("Path or license file is wrong");
    }
}

Теперь в ваших тестах вы можете пройти фабрику, которая может искусственно выдать исключение, инициирующее путь, который вы хотите проверить.

Это все еще оставляет вопрос о том, как вы можете протестировать сам конструктор Cplex (). Возможно, это не ваша проблема, авторы должны иметь свои собственные модульные тесты.

1 голос
/ 23 августа 2009

Вы не можете. Вам нужно будет указать неверное местоположение файла и подтвердить, что вы получите исключение.

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

Полагаю, вы задали расположение этого файла в конфиге? Затем вам нужно просто проверить, что это местоположение является правильным; но учтите, что если у вас несколько развертываний и разные конфигурации, вам нужно будет запустить тест в правильной среде.

...