我正在编写一个依赖于扩展方法结果的测试,但我不希望该扩展方法的未来失败会破坏此测试.模拟这个结果似乎是显而易见的选择,但是Moq似乎没有提供一种覆盖静态方法的方法(扩展方法的要求).与Moq.Protected和Moq.Stub有类似的想法,但它们似乎没有为这种情况提供任何东西.我错过了什么或者我应该以不同的方式去做这件事吗?
这是一个简单的例子,通常会对"不可覆盖的成员的无效期望"失败.这是需要模拟扩展方法的一个不好的例子,但它应该这样做.
public class SomeType {
int Id { get; set; }
}
var ListMock = new Mock<List<SomeType>>();
ListMock.Expect(l => l.FirstOrDefault(st => st.Id == 5))
.Returns(new SomeType { Id = 5 });
Run Code Online (Sandbox Code Playgroud)
至于任何可能建议我使用Isolator的TypeMock迷们:我很欣赏这项努力,因为看起来TypeMock可能会被蒙住眼睛和醉酒,但我们的预算不会很快增加.
我很擅长使用moq.我正在创建一些单元测试用例HttpModule,一切正常,直到我点击static属性如下
this.applicationPath = (HttpRuntime.AppDomainAppVirtualPath.Length > 1) ? HttpRuntime.AppDomainAppVirtualPath : String.Empty;
Run Code Online (Sandbox Code Playgroud)
我不知道如何为static类和属性创建模拟HttpRuntime.AppDomainAppVirtualPath.的context,request并response已与示例代码我从起订量得到很好嘲笑.如果有人可以帮助我,我将不胜感激.
我有这些课程:
public static class UnitOfWorkSS
{
public static IUnitOfWork Begin()
{
return IoC.Resolve<IUnitOfWork>();
}
}
public class PostService
{
using (IUnitOfWork unitOfWork = UnitOfWorkSS.Begin())
{
//don't forget to sanitize html content
htmlContent = _htmlSanitizer.Sanitize(htmlContent);
IPost post = _factory.CreatePost(byUser, title, htmlContent);
_postRepository.Add(post);
unitOfWork.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能嘲笑类UnitOfWorkSS和unitOfWork?
我有这个代码:
public static bool IsValidVoucher(string id)
{
//read tsv files
var temp1 = AppData.GetAppData("stringval");
// code that need to be tested
return true;
}
Run Code Online (Sandbox Code Playgroud)
我喜欢创建单元测试,但是如何模拟AppData.GetAppData("stringval")我想要的值,所以我可以测试其余的代码.
AppData类是:
public class AppData
{
public static object GetAppData(string name)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud) 我在NUnit的帮助下编写单元测试用例并且有一些静态类需要模拟来运行测试用例,所以我们可以在MOQ模拟框架的帮助下模拟静态类吗?
请建议如果有人有想法.
我正在尝试模拟静态类中的静态方法。我已经读到你不能这样做,但我正在寻找一种方法来解决这个问题。
我无法修改代码,并且在不静态的情况下制作相同的函数也不是一个选择,因为他们检查测试的代码覆盖率,而我需要至少 90%。
我已经尝试模拟它使用的变量,但它不起作用。
public static class MyClass
{
public static response MyMethod(HttpSessionStateBase Session,
otherVariable, stringVariable)
{
//some code
}
}
public ActionResult MyClassTested()
{
var response = MyClass.MyMethod(Session);
//more code
}
Run Code Online (Sandbox Code Playgroud)
我的问题是这个方法位于一个控制器内部,该控制器声明一个带有响应的 var ,并根据该变量重定向用户。
道歉 - 这可能是重复的.但我无法在网站的其他地方找到有用的答案.
目前正致力于向应用程序添加电子邮件发送功能.它不是在TDD下完成的,但我们已经建立了测试,并且具有良好的覆盖范围.
我的任务是将电子邮件调度添加到现有功能.
public ActionResult RequestApproval(int? id)
{
Job job = rep.GetJob(id);
//widgets
job.IsApproved = true;
SaveJob(job);
}
Run Code Online (Sandbox Code Playgroud)
这是通过静态助手类完成的:
public static class EmailHelper
{
public static void SendEmail(string subject, string body, params string[] to)
{
//gubbins
}
}
Run Code Online (Sandbox Code Playgroud)
所以我补充道
EmailHelper.SendEmail("Approval", "Please approve a thing", job.UsersWhoCanApprove.Select(a => a.Email).ToArray());
Run Code Online (Sandbox Code Playgroud)
到RequestApproval函数.
我知道我可以通过摆弄配置来有效地测试电子邮件传递功能,但我不想在这里这样做.在第一个实例中,它很慢,在第二个实例中,测试属于静态类的测试套件.
您不能将接口放在静态类上.那么我怎么能重构这个,我可以嘲笑或绕过对静态类的调用?