`
aijuans8
  • 浏览: 187146 次
社区版块
存档分类
最新评论

使用NUnit进行DotNet程序测试

 
阅读更多

使用NUnit进行DotNet程序测试

作者:kongxx

介绍

NUnit是目前比较流行的.Net平台的测试工具,以下就简单介绍一下他的开发。

准备

要使用NUnit,首先要确保您的机器上有NUnit的开发包,您可以从http://www.nunit.org/

地方获取并安装(目前版本是NUnit v2.1.91)。正确安装后会在开始菜单下添加一个NUnit 2.2项目。

属性说明

在开始写例子之前,先把NUnit的属性说明一下:

TestFixture (NUnit2.0)

标识当前类是一个包含测试方法的类。

注意:这个类必须有一个默认的构造方法,并且也必须声明成Public

例如

namespace NUnit.Tests {<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 using System;

 using NUnit.Framework;

 [TestFixture]

 public class SuccessTests {

 // ...

 }

}

Test (NUnit2.0)

标识一个使用TestFixture标识的类中的方法是一个需要测试的方法。

注意:方法的签名被标识为无返回值。

例如:

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture]

 public class SuccessTests {

[Test]

public void Add()

 { /* ... */ }

 public void TestSubtract()

 { /* backwards compatibility */ }

 }

}

SetUp/TearDown

TestFixtureSetUp/SetUp用来在运行测试方法之前构造环境;

TestFixtureTearDown/TearDown用来在运行测试方法之后还原环境。

注意:一个测试类(标识TestFixture)中只可以有一对标记。

TestFixtureSetUp/TestFixtureTearDown (NUnit2.1)

例如:

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture]

 public class SuccessTests {

 [TestFixtureSetUp] public void Init()

 { /* ... */ }

 [TestFixtureTearDown] public void Dispose()

 { /* ... */ }

 [Test] public void Add()

 { /* ... */ }

 }

}

SetUp/TearDown (NUnit2.0)

例如:

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture]

 public class SuccessTests {

 [SetUp] public void Init()

 { /* ... */ }

 [TearDown] public void Dispose()

 { /* ... */ }

 [Test] public void Add()

 { /* ... */ }

 }

}

ExpectedException (NUnit2.0)

指定一个测试将要抛出的异常。

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture]

 public class SuccessTests {

 [Test]

 [ExpectedException(typeof(InvalidOperationException))]

 public void ExpectAnException()

 { /* ... */ }

 }

}

Category NUnit2.2

标识在一组测试中选中的测试。

当使用此属性是,只有选中的Category才会被调用。

例如:

TestFixture上使用Category属性

namespace NUnit.Tests{

 using System;

 using NUnit.Framework;

 [TestFixture]

 [Category("LongRunning")]

 public class LongRunningTests

 {/*…*/}

}

Test上使用Category属性

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture]

 public class SuccessTests {

 [Test]

 [Category("Long")]

 public void VeryLongTest()

 { /* ... */ }

}

ExplicitNUnit2.2

指定一个TestTestFixture被排除在测试选中的测试中。

例如:

TestFixture上使用Explicit属性

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture, Explicit]

 public class ExplicitTests

 {/* ... */}

}

Test上使用Explicit属性

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture]

 public class SuccessTests {

 [Test, Explicit]

 public void ExplicitTest()

 { /* ... */ }

}

Suite NUnit2.0

标识一个测试单元。

????

例如:

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 public class AllTests {

 [Suite]

 public static TestSuite Suite {

 get {

 TestSuite suite = new TestSuite("All Tests");

 suite.Add(new OneTestCase());

 suite.Add(new Assemblies.AssemblyTests());

 suite.Add(new AssertionTest());

 return suite;

 }

 }

 }

}

IgnoreNUnit2.0

在一定的时间内标识TestTestFixture不运行。

例如:

namespace NUnit.Tests {

 using System;

 using NUnit.Framework;

 [TestFixture]

 [Ignore("Ignore a fixture")]

 public class SuccessTests

{/* ... */}

}

简单例子

首先用VS.Net建立一个控制台应用程序项目(TestNUnit),然后在项目中添加引用,选中nunit.framework可以在NUnit的安装目录下找到),然后添加两个类,一个是待测试的类,一个是测试类,

待测试的类内容如下:

using System;

namespace TestNUnit.Sample1

{

public class Sample1 {

public Sample1() {

}

public String GetHelloWorld() {

return "Hello World!";

}

public int Add(int i1 ,int i2) {

return i1 + i2 ;

}

public int Minus(int i1 ,int i2) {

return i1 - i2 ;

}

}

}

测试类内容如下:

using System;

using NUnit.Framework;

namespace TestNUnit.Sample1 {

[TestFixture] //--------------------------------------------1

public class TestSample1 {

private Sample1 sample ;

[SetUp] //--------------------------------------------2

public void Init() {

this.sample = new Sample1();;

}

[TearDown] //--------------------------------------------3

public void TearDown() {

this.sample = null ;

}

[Test] //--------------------------------------------4

public void TestGetHelloWorld() {

Assert.IsNotNull(this.sample.GetHelloWorld());

Assert.AreEqual("Hello World!" ,this.sample.GetHelloWorld());

}

[Test]

public void TestAdd() {

Assert.AreEqual(2,this.sample.Add(1,1));

Assert.AreEqual(3,this.sample.Add(1,2));

Assert.AreEqual(4,this.sample.Add(2,2));

}

[Test]

public void TestMinus() {

Assert.AreEqual(0,this.sample.Minus(1,1));

Assert.AreEqual(1,this.sample.Minus(2,1));

Assert.AreEqual(-1,this.sample.Minus(1,2));

}

}

}

注意测试类(TestSample1)中几个特殊的地方:

1表示当前类是一个测试类;

2表示测试启动前要执行的操作;

3表示测试后要执行的操作;

4表示具体的每个测试方法,这里每个方法都对应要测试类中的方法。

编译以上类,运行NUnitGUI界面(开始->NUnit 2.2->Nunit-Gui),选择File->Open,打开刚才编译项目生成的文件,这里选中TestNUnit.exe(根据具体应用可以是DLL或者别的类型)文件,此时出现一下窗口:

点击Run按钮,出现以下界面:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype>

当运行栏全部是绿色的时候,表示写的测试全部通过,如果出现运行栏显示红色,表示测试出现问题,需要我们修改。

此时表示有两个方法(TestAdd,TestMinus)测试出现问题,需要我们去检查修改,然后重复以上的操作,直到运行栏全部不在显示红色为止。

Mock测试

简介

Mock测试就是在测试过程中,对于某个不容易构造或获取的对象,用一个虚假的对象来创建以方便测试的测试方法。

要使用Mock测试,需要有专门的Mock测试开发包支持,以下使用Nmock来说明。要获得Nmock可以从http://www.nmock.org/获得,目前使用NMock V1.1

示例

添加引用

在项目中添加引用nmock.dll,可以从http://www.nmock.org/获得。

代码

需要被Mock的类:

using System;

namespace TestNUnit.MockSample {

public class BigClass {

public virtual string DoSoming(string hello,string name,string symbol){

return "hello" + " " + name + symbol;

}

public virtual void DoNoing() {

//TODO

}

}

}

被测试的类:

using System;

namespace TestNUnit.MockSample {

public class Sample {

private BigClass bc ;

public Sample(BigClass bc) {

this.bc = bc ;

}

public string GetHelloWorld() {

return "Hello World!";

}

public string GenerateHelloWorld(string hello,string name ,string symbol) {

return this.bc.DoSoming("Hello",name,symbol);

}

}

}

测试类:

using System;

using NUnit.Framework;

using NMock ;

using NMock.Constraints;

namespace TestNUnit.MockSample {

[TestFixture]

public class TestMockSample {

private Mock mock ;

private Sample sample ;

[SetUp]

public void Init() {

this.mock = new DynamicMock(typeof(BigClass));

this.sample = new Sample((BigClass)mock.MockInstance);

}

[TearDown]

public void TearDown() {

mock.Verify();

}

[Test]

public void TestGetHelloWorld() {

this.mock.ExpectNoCall("DoSoming", typeof(String),typeof(String),typeof(String));

this.mock.ExpectNoCall("DoNoing");

Assert.IsNotNull(this.sample.GetHelloWorld());

Assert.AreEqual(this.sample.GetHelloWorld() ,"Hello World!" );

}

[Test]

public void TestGenerateHelloWorld() {

IsEqual hello = new IsEqual("Hello");

IsAnything name = new IsAnything();

IsEqual symbol = new IsEqual("!");

this.mock.ExpectAndReturn("DoSoming","Hello kongxx!" ,hello, name, symbol);

this.mock.ExpectNoCall("DoNoing");

Assert.AreEqual("Hello kongxx!",sample.GenerateHelloWorld("Hello","kongxx","!"));

}

}

}

运行

编译以上类,然后运行NUnit的图形界面,载入编译过的程序(exedll),出现以下界面:

然后运行,出现以下界面:

如果运行栏全部显示绿色表示通过测试,否则检查错误,修改,编译,运行直到全部运行成功为止。

参考资料

1NUnit http://www.nunit.org/

2Nmock http://www.nmock.org/index.html

3mockobjects http://www.mockobjects.com/FrontPage.html

分享到:
评论

相关推荐

    DotNet测试工具NUnit2.2.9——中文手册

    除了运行单个的程序集之外,NUnit也支持由多个程序集组织的测试,也提供把测试作为NUnit测试工程进行创建和运行。 对于那些安装Visual Studio的并在Windows系统使用NUnit的用户来说,Visual Studio支持是可用的。

    NUnit学习之VSdotnet2005篇

    【NUnit学习之VSdotnet2005篇】是一个关于使用NUnit进行单元测试的教程,特别针对Visual Studio .NET 2005开发环境。NUnit是一款流行的开源单元测试框架,它允许程序员对C#代码进行自动化的测试,确保代码的功能正确...

    DotNet软件测试自动化之道源码

    3. **自动化UI测试**:可能探讨了使用Selenium WebDriver进行Web应用程序的用户界面自动化测试,包括元素定位、事件模拟和断言等技术。 4. **持续集成与持续部署**:可能讲解了Jenkins、TeamCity或Azure DevOps等...

    DotNET软件测试自动化之道

    - **性能测试**:介绍了如何使用.NET工具进行性能测试,包括基准测试、负载测试等,并给出了具体的实施建议。 #### 五、总结 《DotNET软件测试自动化之道》不仅是一本技术手册,更是一本关于如何构建高效自动化...

    NUnit.Framework-3.12.0.zip

    NUnit是一个广泛使用的开源单元测试框架,主要用于.NET应用程序的测试。这个版本,NUnit.Framework-3.12.0,提供了许多改进和新特性,旨在提高开发者在编写和执行单元测试时的效率和便利性。 NUnit的核心功能包括:...

    selenium-dotnet-3.4.0

    【Selenium-dotnet-3.4.0】是一款基于.NET Framework的自动化测试工具,用于模拟浏览器操作,适用于Web应用程序的功能性和回归测试。Selenium与DotNet的结合为.NET开发者提供了强大的自动化测试能力,使得测试代码...

    ResviewCRM的ExtJS页面程序_dotnet整站程序.rar

    ResviewCRM可能使用NUnit或xUnit进行单元测试,TFS(Team Foundation Server)或Jenkins进行持续集成,确保代码质量和稳定性。 10. **用户体验**: ExtJS的组件丰富,使得ResviewCRM的界面美观且操作直观。良好的...

    selenium-dotnet-2.41.0

    总的来说,Selenium-dotnet-2.41.0是一个强大的Web自动化测试工具,为.NET开发者提供了丰富的功能,帮助他们高效地进行网页应用的测试工作。通过WebDriver.chm文档学习和理解Selenium API,以及根据项目需求选择合适...

    邮政网全站_dotnet整站程序.rar

    10. **测试**:单元测试、集成测试和压力测试都是确保程序质量的重要环节,可能使用了NUnit、xUnit等测试框架。 总的来说,这个“邮政网全站_dotnet整站程序.rar”涵盖了.NET Web开发的多个层面,包括但不限于架构...

    roaster自动测试DOTNET方法教程

    与传统的测试框架(如NUnit)相比,`roaster`提供了更为便捷的安装流程和更直观的使用体验,使得开发者能够快速上手并进行自动化测试。 #### 三、安装roaster 首先,我们需要安装`roaster`。这一步骤非常简单: 1. ...

    dotnet-VSTest是由微软开源的VisualStudio测试平台

    dotnet-VSTest是微软为.NET开发者提供的一个强大的开源测试框架,它与Visual Studio紧密集成,但同时也支持命令行工具的使用,使得测试工作在不同的环境中都能够顺利进行。VSTest平台旨在提供全面的单元测试、集成...

    selenium-dotnet 2.4

    Selenium-dotnet 是一个用于Web应用程序自动化测试的框架,特别适合进行功能测试和回归测试。它允许开发人员使用C#编程语言来控制浏览器,模拟真实用户的行为。在这个版本中,我们关注的是2.26.0和2.44.0这两个版本...

    DotNet视频教程下载列表

    8. **测试驱动开发(TDD)**:了解TDD的理念,使用NUnit、MSTest等测试框架编写单元测试,确保代码质量。 9. **云计算与Azure**:探讨 DotNet 在云环境中的应用,学习如何使用Azure平台部署和管理应用程序,包括Web...

    DotNet Unit Test

    在描述中提到,如果你已经熟悉 Junit 或 Nunit 这样的单元测试框架,那么你将能够快速上手 DotNet Unit Test,因为它们的基本工作原理和使用方式是相似的。 1. **调试和跟踪**:标签中提到了“调试和跟踪”,这是...

    dotnet面试常见问题

    .NET提供了诸如xUnit、NUnit、MSTest等单元测试框架,Moq、NSubstitute等模拟框架用于测试隔离。对于集成测试,可以利用ASP.NET Core的测试服务器或实际数据库进行。 以上问题只是.NET面试中的冰山一角,深入理解...

    .Net 单元测试案例

    在实际操作中,我们可以使用Visual Studio自带的测试探索器来组织和运行测试,也可以使用命令行工具(如dotnet test)进行自动化测试。持续集成/持续部署(CI/CD)流程也可以集成单元测试,确保每次代码变更后,所有...

    DotNetCore:DotNetCore测试

    此外,可以使用dotnet CLI命令行工具进行编译、运行测试和打包操作,使得开发流程更为顺畅。 总结来说,.NET Core的测试涵盖了单元、集成和端到端等多个层面,配合跨平台的开发工具和CI/CD流程,能够确保在MAC和...

    nunit:NUnit 3框架

    这两个许可证都允许在不受限制的免费和商业应用程序和库中使用NUnit。NUnit项目NUnit由几个项目组成。 报告问题时,请尝试报告正确项目中的问题。核心项目-用于编写NUnit测试的测试框架(此存储库) -从命令行运行...

    DotNet类库开发人员设计指南_doc

    使用NUnit、xUnit或MsTest等测试框架,编写自动化测试用例,保证代码质量。 8. **版本控制与持续集成**:使用Git等版本控制系统管理代码,并配合Jenkins、Travis CI等工具进行持续集成,可以及时发现并修复问题,...

    ASP.NET程序员培训网站源码_dotnet整站程序.rar

    11. **单元测试**:了解如何使用NUnit、MSTest或xUnit进行单元测试,确保代码质量。 12. **AJAX**:使用jQuery、ASP.NET AJAX控件和更新面板实现页面异步更新。 13. **Web API**:如果源码中包含这部分,可以学习...

Global site tag (gtag.js) - Google Analytics