我正在为我的项目中的某些控制器方法编写一些单元测试,并且想知道是否要对控制器类本身或该控制器的接口进行测试.
我应该为每个控制器创建一个接口并对其进行单元测试吗?
我无法理解为什么NUnit Assert.AreEqual失败了.
var dataService = new DataService(db);
dataService.Set("Tests", "circle1", circle);
var circleData = dataService.Get("Tests", "circle1");
Assert.IsNotNull(circleData);
var circleCopy = circleData.Get();
Assert.AreEqual(circle, circleCopy);
Run Code Online (Sandbox Code Playgroud)
使用NHibernate(存储序列化数据,然后反序列化).我插入了一个断点并检查了局部变量窗口中的对象 - 它们是相同的.
这是NUnit消息:
Assert.AreEqual failed. Expected:<TestData.TestClassCircle>. Actual:<TestData.TestClassCircle>.
Run Code Online (Sandbox Code Playgroud)
当对象看起来相同时,为什么这个测试会失败?
肯定会有一些我忽视的东西 - 通常是我遇到这样的问题.
我有一个控制器只是根据提供的ID返回一篇新闻文章:
[HandleError]
public class HomeController : Controller
{
private readonly IArticleRepository articleRepository;
public HomeController(IArticleRepository Repository)
{
articleRepository = Repository;
}
public ActionResult Index()
{
return View("Index");
}
// Here's the bit we're interested in
public ActionResult Article(int id)
{
var article = articleRepository.GetById(id);
return View("Article", article);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Moq嘲笑这个:
[TestFixture]
public class HomeControllerTests
{
HomeController controller;
int articleId;
Article model;
[TestFixtureSetUp]
public void SetupMethods()
{
Mock<IArticleRepository> repositoryMock = new Mock<IArticleRepository>();
repositoryMock.Setup(x => x.GetById(articleId)).Returns(GetSampleArticle());
controller = new HomeController(repositoryMock.Object); …Run Code Online (Sandbox Code Playgroud) 我正在学习SpecFlow并且正在做一个简单的Com-Sci标准FizzBuzz项目.给定一系列数字替换可被3整除,Fizz替换可被5整除,Buzz替换可被3和5整除,使用FizzBuzz.
这是一个非常简单的应用程序,但它确实为我提出了一个问题.如何编写功能来测试多个requiremts,它们都是通过API上的一个方法调用触发的?例如FizzBuzz.Replace(1, 100);
,使用Replace方法代码,API调用如下所示
public static string Replace (int min, int max)
{
if (IsDiv3 && IsDiv5) {...}
if (IsDiv3) {...}
if (IsDiv5) {...}
...
}
Run Code Online (Sandbox Code Playgroud)
我在SpecFlow中的功能如下:
Feature: FizzBuzz
In order to display Fizz Buzz in range of numbers
As a user I want to be able to see Fizz Buzz replace certain numbers
Scenario: Replace muliples of three and five with Fizz, Buzz or FizzBuzz
Given I have a range of numbers from 1 to 15
When I …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个单元测试(NUnit),它将:
我似乎无法得到这个逻辑......测试总是通过.
可以这样做吗?
我正在开始一个维护项目,我需要使用遗留代码并创建新代码.新的我可以创建适当的基于接口的开发,我可以使用Moq进行适当的单元测试.我不能将Moq用于遗留代码,因为他们没有适当的编码来模拟对象.根据阅读,Typemock看起来非常合适,因为我可以隔离对象并在遗留对象上调用方法时返回我们想要的内容.我非常喜欢简单易用的开发.我想知道是否有任何其他工具像Typemock我应该在承诺之前看一下,因为我必须付钱.
谢谢
PS:我们的是微软商店,我们使用C#/ ASP/ASp.Net/Silverlight和VB.Net
**我刚刚发现Infragistics也有一个模拟工具.
我正在使用Visual Studio作为C#应用程序.
在我的电脑中,我安装了Gallio,这是一套测试工具(包括测试运行器).我的单元测试是使用NUnit框架的正常单元测试.在我的PC上,Visual Studio可以识别并运行测试.
但是当我更换PC或者从我手中卸载Gallio时,Visual Studio无法再找到单元测试,如下所示:
"没有运行测试,因为未加载任何测试或禁用所选测试"
我知道我的项目无法加载的事实是因为Gallio.当我在我的项目中添加Test类时,Test Type被设置为Gallio.我尝试了几乎所有东西,使Visual Studio能够再次找到我的测试类,但没有任何运气.
有没有人有同样的问题?任何想法为什么会这样?
谢谢.
我一直在遇到NUnit的麻烦.我有一个继承自List并重写Equals()的类(因此当它们以不同的顺序包含相同的元素时,可以认为两个实例相等).使用Assert.AreEqual时,它会失败,但使用Assert.True并手动调用Equals会起作用:
[Test]
public void Equals()
{
var dieSet1 = new DieSet {new Die(1), new Die(2)};
var dieSet2 = new DieSet {new Die(2), new Die(1)};
Assert.True(dieSet1.Equals(dieSet2)); //ok
Assert.AreEqual(dieSet1, dieSet2); //fails with an exception
}
Run Code Online (Sandbox Code Playgroud)
这是一个例外细节:
NUnit.Framework.AssertionException未被用户代码处理HResult = -2146233088消息=预期和实际都有2个元素值在index [0]处不同预期:但是:
Source = nunit.framework StackTrace:在NUnit.Framework.Assert.That(Object actual,IResolveConstraint expression,String message,Object [] args)在DiceLibTest.DieSetTest的NUnit.Framework.Assert.AreEqual(Object expected,Object actual). c:\ dev_code\DiceLib\DiceLibTest\DieSetTest.cs中的Equals():第47行InnerException:
我在Equals()中设置了一个断点,并确保在调用Assert.AreEqual时没有调用它.
我的班级是这样的:
public class DieSet : List<Die>, IRollable
{
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些相关的问题,例如: NUnit与Assert.AreEqual不兼容
但我仔细检查了我的Equals()方法有正确的签名.
public override bool Equals(object obj)
{
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是NUnit内部在List <>和/或数组和/或集合中一般有一些特殊的行为,而且我的类属于这些类别之一.我的另一个猜测是,我做错了什么,我没有看到明显的......
我试图通过运行一些单元测试来测试NUnit.但是,我注意到了一件事.在NUnit版本2.6.2(最新版本)中,当我导入测试dll文件时,测试在适当的位置传递并失败,他们给了我正确的警告,消息和指示器.
但是,在NUnit版本2.4 RC1中,忽略相同的单元测试.错误消息显示:"TestClass没有任何测试"但它确实包含测试.
为什么是这样?我正在尝试验证旧版本的软件,我需要在旧版本上运行单元测试.
我用这个例子来运行测试:http://www.codeproject.com/Articles/178635/Unit-Testing-Using-NUnit
我想阅读一个模拟的RSS提要文件,以便在Android应用的Xamarin NUnit测试中进行测试.测试类没有上下文,所以我不能将文件放在Assets文件夹中并执行此操作:
System.IO.Stream strIn = instanceOfAssetManager.Open(feedFile);
Run Code Online (Sandbox Code Playgroud)
它也没有祖先,所以我不能这样做:
System.IO.Stream strIn = this.Class.ClassLoader.ResourceAsStream(feedFile);
Run Code Online (Sandbox Code Playgroud)
有什么建议我怎么可以到达快乐的事情?
这个案例解决了不同平台/设置的类似问题: 在测试项目中存储测试文件
nunit ×10
c# ×8
unit-testing ×3
.net ×2
moq ×2
asp.net-mvc ×1
nhibernate ×1
ninject-2 ×1
specflow ×1
tdd ×1
typemock ×1
winforms ×1