Мой тест аварийно завершает работу сразу после запуска. Я ожидаю конкретный код выхода с определенным значением, но всегда получаю -532462766.

Я запускаю процессы в зависимости от местоположения сборки:

Речь идет о DLL. Системные журналы подтверждают отсутствие файлов.


Если я захватываю консоль, это подтверждает, что речь идет об отсутствующих DLL. Конечно, в реальном сценарии консоль/форма/окна не появляются, это просто упрощенное решение.
[img]https://i.stack .imgur.com/6gaEj.png[/img]
Я проверил заданное временное местоположение, созданное с помощью инструмента тестирования, и заметил, что *.exe находится в другой подпапке, чем DLL. Я думаю, *.exe не знает, как ссылаться на них, поскольку они не находятся в своем обычном относительном расположении. NCrunch хранит все файлы в основном временном каталоге, поэтому работает.
Как это проверить? Я не хочу создавать оболочку Environment, чтобы издеваться над ней. Я не хочу по-настоящему проверять, запускается ли процесс и может ли он завершиться при выполнении некоторых определенных условий.
Вот очень упрощенная версия моего проекта:

Основной проект ( Внешнийпроцесс)
namespace ExternalProcess {
public class Program {
public static void Main(string[] args) {
CommonCode.Enums.ProcessType processType = (CommonCode.Enums.ProcessType)Enum.Parse(typeof(CommonCode.Enums.ProcessType), args[0]);
switch (processType) {
case CommonCode.Enums.ProcessType.TEST:
case CommonCode.Enums.ProcessType.PROD:
case CommonCode.Enums.ProcessType.DEV:
Environment.Exit((int)processType);
break;
default:
Environment.Exit((int)CommonCode.Enums.ProcessType.ERROR);
break;
}
}
}
}
Дополнительная DLL (ExternalProcess.CommonCode)
namespace ExternalProcess.CommonCode.Enums {
public enum ProcessType {
PROD,
TEST,
DEV,
ERROR
}
}
Тестовый проект (ExternalProcessTests)
using System.Reflection;
using FluentAssertions;
using Xunit;
namespace ExternalProcessTests {
public class ProcessTests {
[Fact]
public void TestProcess() {
var processType = ExternalProcess.CommonCode.Enums.ProcessType.TEST;
var process = new System.Diagnostics.Process {
EnableRaisingEvents = false
};
process.StartInfo.FileName = Assembly.GetAssembly(typeof(ExternalProcess.Program)).Location;
process.StartInfo.UseShellExecute = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.Arguments = processType.ToString();
process.Start();
process.WaitForExit();
process.HasExited.Should().BeTrue();
process.ExitCode.Should().Be((int)processType);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... code-value
Мобильная версия