Tag: unit testing

如何在Asp.Net MVC 4中模拟HttpContext.User.Identity.Name

我在控制器中有代码消耗HttpContext public ActionResult Index() { var currentUser=HttpContext.User.Identity.Name; …… } 尝试使用像这样的NUnit编写测试时 [Test] public void CanDisplayRequest() { //Act var result= (ViewResult)_requestController.Index(); //Assert Assert.IsInstanceOf(resut.Model); } 测试将失败,因为它找不到HttpContext 那么如何模拟HttpContext.Current.User.Identity.Name 我正在使用Moq进行模拟

C#比较两个字典是否相等

我想在C#中将两个字典与string作为键进行比较,并将值作为int的列表进行比较。 我假设两个字典在它们具有相同的键时是相等的,并且对于每个键而言,它们是具有相同整数的列表(两者不一定是相同的顺序)。 我使用了这个和这个相关问题的答案,但是我的测试套件都没有通过测试函数DoesOrderKeysMatter和DoesOrderValuesMatter 。 我的测试套件: using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.Linq; namespace UnitTestProject1 { [TestClass] public class ProvideReportTests { [TestMethod] public void AreSameDictionariesEqual() { // arrange Dictionary<string, List> dict1 = new Dictionary<string, List>(); List list1 = new List(); list1.Add(1); list1.Add(2); dict1.Add(“a”, list1); List list2 = new List(); list2.Add(3); list2.Add(4); dict1.Add(“b”, list2); // act […]

测试ModelState在asp.net mvc中始终有效

在测试控制器的操作时,ModelState始终有效。 public class Product { public int Id { get; set; } [Required] [StringLength(10)] public string Name { get; set; } [Required] public string Description { get; set; } [Required] public decimal Price { get; set; } } 和我的控制器。 public class ProductController : Controller { [HttpPost] public ActionResult Create(Product product) { if (ModelState.IsValid) { // […]

如何unit testing在MVVM中调用异步方法的DelegateCommand

我是unit testingMVVM的新手,在我的项目中使用PRISM。 我正在我们当前的项目上实现unit testing,而没有运气在线查找资源,这将告诉我如何调用异步方法的totest DelegateCommand。 这是我的post的后续问题 – 如何使用异步方法对ViewModel进行unit testing。 关于如何在MVVM中unit testing异步方法,并回答公共方法可以使用异步TestMethod进行测试。 仅当我要测试的方法是公共方法时,此方案才有效。 问题是我想测试我的DelegateCommand,因为这是我想要在其他类上公开的唯一公共细节,其他所有内容都是私有的。 我可以公开我的私人方法,但我永远不会这样做,因为它是一个糟糕的设计。 我不确定如何解决这个问题 – 是否需要对DelegateCommand进行测试,还是有其他一些工作? 我很想知道其他人如何去做,并以某种方式引导我走向正确的道路。 这是我的代码 async void GetTasksAsync() { this.SimpleTasks.Clear(); Func<IList> taskAction = () => { var result = this.dataService.GetTasks(); if (token.IsCancellationRequested) return null; return result; }; IsBusyTreeView = true; Task<IList> getTasksTask = Task<IList>.Factory.StartNew(taskAction, token); var l = await getTasksTask; // […]

MSTest:CollectionAssert.AreEquivalent失败。 预期的集合包含1次出现

问题 : 任何人都可以告诉我为什么我的unit testing失败了这个错误消息? CollectionAssert.AreEquivalent失败。 预期的集合包含1次出现。 实际集合包含0次出现。 目标 : 我想检查两个列表是否相同。 如果它们包含具有相同属性值的相同元素,则它们是相同的。 订单无关紧要。 代码示例 : 这是产生错误的代码。 list1和list2是相同的,即彼此的复制粘贴。 [TestMethod] public void TestListOfT() { var list1 = new List() { new MyPerson() { Name = “A”, Age = 20 }, new MyPerson() { Name = “B”, Age = 30 } }; var list2 = new List() { new […]

如何MOQ System.IO.FileInfo类…或没有接口的任何其他类?

我正在为我创建的记录器类编写一些unit testing,我想模拟文件类。 我找不到我需要用来创建MOQ的接口……那么如何在没有接口的情况下成功MOQ一个类? 我还不清楚如何在没有可用接口的情况下使用dependency injection: private FileInfo _logFile; public LogEventProcessorTextFile(FileInfo logFile) { _logFile = logFile; } 当我真的想做这样的事情时(注意IFileInfo而不是FileInfo): private IFileInfo _logFile; public LogEventProcessorTextFile(IFileInfo logFile) { _logFile = logFile; }

使用Moq模拟NHibernate ISession

我正在使用NHibernate,ASP.NET MVC 2.0和StructureMap开始一个新项目,并使用NUnit和Moq进行测试。 对于我的每个控制器,我都有一个公共构造函数,其中注入了一个ISession。 应用程序本身工作正常,但就unit testing而言,我基本上必须模拟一个ISession才能测试控制器。 当我尝试使用MOQ模拟ISession时,我收到以下错误消息: 中间调用仅支持属性访问 看来我的问题是期待来自框架CreateQuery方法的用户列表,但在谷歌搜索问题之后我现在更清楚了。 我有两个问题: 1)这是模拟dependency injectionISession的错误方法吗? 2)有没有办法修改代码,以便它可以成功返回我的列表 [Test] public void DummyTest() { var mock = new Mock(); var loc = new Mock(); loc.SetupGet(x => x.ID).Returns(2); loc.SetupGet(x => x.FirstName).Returns(“John”); loc.SetupGet(x => x.LastName).Returns(“Peterson”); var lst = new List {loc.Object}; mock.Setup(framework => framework.CreateQuery(“from User”).List()).Returns(lst); var controller = new UsersController(mock.Object); var result = […]

如何使用PrivateObject访问我的类及其父级的私有成员?

我正在测试一个属于层次结构的类。 我一直在设置我的测试类和被测对象,以及一个允许访问该对象的PrivateObject 。 当我尝试访问父类的私有成员时,我遇到exception。 到目前为止,我发现的唯一解决方法是将指定基类的PrivateObject传递给PrivateObject构造函数,但是它不适用于子类的私有成员。 有没有办法可以做到这一点,也许是通过在Private对象的Get *方法上使用binding flags参数? 我尝试使用自动生成的Accessor类(右键单击主类,Create Private Accessor)。 但是,情况更糟:它显示了我可以读取的属性,但它抛出与PrivateObject相同的exception,并且没有其他选项可以使用(绑定标志或诸如此类)来修复exception。 这是我的示例测试代码。 我希望有一些方法来构造和使用PrivateObject来检索这两个字段。 public class BaseClass { private int one = 1; } public class SubClass : BaseClass { private int two = 2; } [TestClass] public class UnitTest1 { BindingFlags flags = BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; [TestMethod] public void TestMethod1() […]

如何模拟DbContext

这是我想要测试的代码 public DocumentDto SaveDocument(DocumentDto documentDto) { Document document = null; using (_documentRepository.DbContext.BeginTransaction()) { try { if (documentDto.IsDirty) { if (documentDto.Id == 0) { document = CreateNewDocument(documentDto); } else if (documentDto.Id > 0) { document = ChangeExistingDocument(documentDto); } document = _documentRepository.SaveOrUpdate(document); _documentRepository.DbContext.CommitChanges(); } } catch { _documentRepository.DbContext.RollbackTransaction(); throw; } } return MapperFactory.GetDocumentDto(document); } 这是我的测试代码 [Test] public […]

如何避免unit testing目的的HttpContext.Server.MapPath

我在ASP.net MVC 5应用程序中工作。 我想unit testing我的控制器动作,看起来像这样 public ActionResult Search() { var vm = SetupSearchViewModel(); return View(vm); } 所有艰苦的工作都是由SetupSearchViewModel()方法完成的,它本身就是一个调用许多不同方法的协调器,其中一个是这个 private string ExtractJsonFile(string filename) { var filePath = HttpContext.Server.MapPath(filename); var json = System.IO.File.ReadAllText(filePath); return json; } 我计划对这个特定的动作做很多unit testing,但是我从一个非常简单的unit testing开始,它检查是否返回了正确类型的ActionResult [Test] public void Search_Get_ReturnsViewResult() { // arrange var performanceController = PerformanceControllerInstance; // act var result = performanceController.Search(); //assert Assert.IsNotNull(result […]