Moq не может подделывать статические элементы.
В качестве решения вы можете создать класс-оболочку (Pattern Adapter), содержащий статическое свойство, и подделать его члены.
Например:
public class HttpRuntimeWrapper
{
public virtual string AppDomainAppVirtualPath
{
get
{
return HttpRuntime.AppDomainAppVirtualPath;
}
}
}
В рабочем коде вы можете получить доступ к этому классу вместо HttpRuntime
и подделать это свойство:
[Test]
public void AppDomainAppVirtualPathTest()
{
var mock = new Moq.Mock<HttpRuntimeWrapper>();
mock.Setup(fake => fake.AppDomainAppVirtualPath).Returns("FakedPath");
Assert.AreEqual("FakedPath", mock.Object.AppDomainAppVirtualPath);
}
Другим решением является использование Isolation Framework (как Typemock Isolator ), в котором вы можете подделывать статические классы и члены.
Например:
Isolate.WhenCalled(() => HttpRuntime.AppDomainAppVirtualPath)
.WillReturn("FakedPath");
Отказ от ответственности - я работаю в Typemock