Относительный путь неверен, потому что у вас нет контроля над текущим каталогом, на котором основан относительный путь.Тот же код также не будет работать, если вы просто запустите консольное приложение без предварительного перехода в каталог, содержащий каталог изображений, например ...
foo\bar\myprogram.exe
В общем, пользователь программы имеет контрольпо текущему каталогу.Плохо, когда программа меняет текущий каталог или полагается, что он настроен на какое-то конкретное местоположение ... например, местоположение выполняемой сборки.
Альтернативные способы определения местоположения каталога изображения зависят от того,путь определяется в вашем тесте или в тестируемом приложении.Если он находится в тесте, то у NUnit есть TestContext.TestDirectory
, который является путем к каталогу, содержащему тестовую сборку.Если оно находится в самом приложении, то приложение должно быть закодировано таким образом, чтобы находить каталог изображений относительно определенного места, например, каталог, содержащий основную программу.Если вы укажете, где находится этот код, я могу дать более точное предложение.
Обновление - 22 января 2019
Использование относительного пути в пределахВаше приложение является слабым местом приложения, которое приведет к его отказу в определенных обстоятельствах, если у вас не будет полный контроль над текущими настройками каталога при каждом запуске программы.Запуск тестов под NUnit - это только одно из таких обстоятельств.IMO, вы должны изменить приложение так, чтобы оно находило изображения по пути относительно каталога, содержащего exe и , а не относительно текущего каталога.Это займет немного больше кода, но лучше, потому что это именно то, что вы собираетесь сделать.Ваши тесты делают вам одолжение, указав на эту проблему!
Вот некоторый код, который найдет изображения (см. Исключение ниже) относительно места сборки, которое выполняет загрузку изображений ...
string assemblyPath = GetType().Assembly.Location;
string assemblyDir = Path.GetDirectory(assemblyPath);
string imagePath = path.Combine(assemblyDir, "Images\\1.dice.GIF");
diceImageArray[0] = Image.FromFile(imagePath);
Я распределяю код по нескольким строкам, чтобы вам было легче видеть каждый шаг.Вы можете, конечно, объединить некоторые из них.Код был только «скомпилирован» в SO, поэтому я оставлю любые ошибки для вас, чтобы исправить.: -)
Исключением из приведенного выше кода является то, что ваш код копируется в тени.Затем вам нужен доступ к исходному местоположению, из которого оно получено, а не к текущему местоположению.Если это так, то требуется немного больше кода, и я не хотел бы чрезмерно усложнять пример.
Если сборка, которая загружает изображения, всегда находит их относительно себя, тогда ваши тесты должныработать, пока вы убедитесь, что изображения существуют в этом месте.