Запуск веб-сервера разработки ASP.NET (Cassini) в рамках настройки модульного теста? - PullRequest
3 голосов
/ 30 ноября 2008

Я использую WatiN, NUnit и ReSharper для запуска модульных тестов ASP.NET внутри Visual Studio. Я бы хотел (если он еще не запущен) запустить Cassini для выполнения моих тестов.

Возможно ли это? Как бы я это сделал?

Ответы [ 3 ]

8 голосов
/ 04 января 2010

Я только что выпустил бета-версию CassiniDev 3.5.1 / 4.0.1 с простым примером тестового приложения, если вам интересно.

Кассини для разработчиков и тестеров: http://cassinidev.codeplex.com

Мо бетта, слово.

2 голосов
/ 30 ноября 2008

Вот код:

private static void GetDevelopmentServerVPathAndPortFromProjectFile(
    string csprojFileName,
    out string developmentServerVPath,
    out int developmentServerPort)
{
    XPathDocument doc = new XPathDocument(csprojFileName);
    XPathNavigator navigator = doc.CreateNavigator();

    XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
    manager.AddNamespace("msbuild",
        "http://schemas.microsoft.com/developer/msbuild/2003");

    const string xpath = "/msbuild:Project/msbuild:ProjectExtensions/"
                       + "msbuild:VisualStudio/msbuild:FlavorProperties/"
                       + "msbuild:WebProjectProperties";

    XPathNavigator webProjectPropertiesNode =
        navigator.SelectSingleNode(xpath, manager);
    XPathNavigator developmentServerPortNode =
        webProjectPropertiesNode.SelectSingleNode("msbuild:DevelopmentServerPort",
            manager);
    XPathNavigator developmentServerVPathNode =
        webProjectPropertiesNode.SelectSingleNode("msbuild:DevelopmentServerVPath",
            manager);

    developmentServerPort = developmentServerPortNode.ValueAsInt;
    developmentServerVPath = developmentServerVPathNode.Value;
}

private static string GetCommonProgramFilesPath()
{
    string commonProgramFiles =
        Environment.GetEnvironmentVariable("CommonProgramFiles(x86)");
    if (string.IsNullOrEmpty(commonProgramFiles))
    {
        commonProgramFiles =
            Environment.GetEnvironmentVariable("CommonProgramFiles");
    }
    if (string.IsNullOrEmpty(commonProgramFiles))
    {
        commonProgramFiles =
            Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles);
    }
    return commonProgramFiles;
}

private static Process PrepareCassiniProcess(int developmentServerPort,
                                             string projectPhysicalPath,
                                             string developmentServerVPath)
{
    string commonProgramFiles = GetCommonProgramFilesPath();
    string cassiniPath = Path.Combine(commonProgramFiles,
        @"Microsoft Shared\DevServer\9.0\WebDev.WebServer.exe");
    string cassiniArgs = string.Format(
        CultureInfo.InvariantCulture,
        "/port:{0} /nodirlist /path:\"{1}\" /vpath:\"{2}\"",
        developmentServerPort, projectPhysicalPath, developmentServerVPath);

    Process cassiniProcess = new Process();
    cassiniProcess.StartInfo.FileName = cassiniPath;
    cassiniProcess.StartInfo.Arguments = cassiniArgs;
    return cassiniProcess;
}

Чтобы использовать его, вам необходимо найти путь к файлу CSPROJ тестируемого веб-проекта. Я оставлю это как упражнение для читателя (в настоящее время я получил его жестко).

1 голос
/ 30 ноября 2008

Сервер Cassini - это WebDev.WebServer.EXE. Есть несколько блогов, которые показывают, как запустить его вручную. Вот один из них:

http://www.dotnetjunkies.com/WebLog/saravana/archive/2005/06/18/126143.aspx

...