在MS Test中如何测试private方法
前言:
在博客开始之前,我们先讨论一下是否应该对private方法做测试,通常有两种观点:
- private方法应该被测试;
- private方法不应该被测试;
我们以下面的代码为例子来进行说明:
public class Salary
{
public int Calcuate(int bs, int nwd)
{
int ts; if(IsValidNwd(nwd))
{
ts = bs * nwd;
}
else
{
ts = 1000;
} return ts;
} private bool IsValidNwd(int nwd)
{
if(nwd > 8)
{
return true;
}
else
{
return false;
}
}
}
这个被测试类中包含两个方法:
- IsValidNwd是一个private方法,当nwd大于8时返回true,否则返回false;
- Calcuate方法是一个public方法,包含两个输入参数。Calculate方法中第一步使用IsValidNwd方法检查nwd是否合法,如果nwd合法,则使用基本工资*工作天数。如果nwd不合法,则返回一个固定值1000.
观点1: private方法不应该被单独测试,这是因为public方法中会使用到这些私有方法当我们测试public方法时,private方法的行为会被一并测试掉。
观点2: 要对private方法进行单独的测试。
如何对private方法做单元测试
有两种方式可以对private方法做单元测试,
- 使用Refection --- 比较复杂;
- 使用VSTS PrivateObject类;
下面的示例中使用PrivateObject类来完成,
- 可以直接创建一个MS Unit Test工程,或者新建一个类库工程,添加Microsoft.VisualStudio.QualityTools.UnitTestFramework引用,
- 添加Microsoft.VisualStudio.TestTools.UnitTesting名称空间
[TestClass]
public class SalaryFunctionalTesting
{
[TestMethod]
public void IsValidNwd_ValidInput_ReturnTrue()
{
PrivateObject obj = new PrivateObject(typeof(Salary)); bool result = Convert.ToBoolean(obj.Invoke("IsValidNwd",9)); Assert.AreEqual(true, result);
} [TestMethod]
public void IsValidNwd_InValidInput_ReturnFalse()
{
PrivateObject obj = new PrivateObject(typeof(Salary)); bool result = Convert.ToBoolean(obj.Invoke("IsValidNwd", 6)); Assert.AreEqual(false, result);
}
}
上述代码中,执行了如下任务:
- 创建PrivateObject对象,将Salary类型做为参数传递给PrivateObject的构造函数;
- 使用Invoke方法调用和执行被测试类中私有方法;
感谢您的阅读~
在MS Test中如何测试private方法的更多相关文章
- .NET中如何测试Private和Protected方法
TDD是1)写测试2)写通过这些测试的代码,3)然后重构的实践.在,NET社区中, 这个概念逐渐变得非常流行,这归功于它所增加的质量保证.此时,它很容易测试public方法,但是一个普遍的问题出现了, ...
- java中static,final,private方法的继承多态问题
父类中的final private方法不能被继承,父类中的static方法可以被继承,但是不能重写,这三者都属于前期绑定,java中除了这三种以及构造方法之外剩下的都是后期绑定(运行是绑定). 当父 ...
- mock中测试private方法,不是mock
Method method = PowerMockito.method(CategoryController.class, "getCategory",List.class);// ...
- Junit测试private方法
package com.bill99.junit; public class ACase { private String echoRequest(String request) { return & ...
- 使用 Visual Studio Team Test 进行单元测试和java中的测试
C#中test测试地 方法一. 1.从NUnit官网(http://www.nunit.org/index.php)下载最新版本NUnit,当前版本为NUnit2.5.8. 2.安装后,在VS2008 ...
- [bug]spring项目通过反射测试私有方法时,注入对象异常
背景 遇到问题:在进行Spring单元测试编写时,发现被测方法是一个私有方法,无法直接通过注入对象调用 解决思路:首先想到通过反射获取该私有方法的访问权限,并传入注入对象,最终调用对象的私有方法. 出 ...
- PHPUnit单元测试中类protected/private方法测试
这里首先有一个问题要考虑的是,这类方法是否要被测试? 理论上,这类方法都会被其它public类型的方法调用,只要对那些public的方法做充分的测试,就可以保证这些方法的可靠性,就没有必要再测了.好像 ...
- Ms SQLServer中的Union和Union All的使用方法和区别
Ms SQLServer中的Union和Union All的使用方法和区别 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 ...
- 关于c++中public & private方法调用问题
class IDNoIdentifier { public: IDNoIdentifier(); ~IDNoIdentifier(); typedef vector<cv::Rect> C ...
随机推荐
- office 2013母版保存并调用
如果觉得某个ppt的母版不错,想保存下来以后使用的话,那么执行 开始->另存为-> 选择位置和格式,注意格式选择potx. 之后如果想要使用这组母版,怎么办呢? 浏览主题,打开之前保存的 ...
- [LeetCode系列] 跳跃问题II
给定一系列非负整数, 每个值代表从此下标可以向前跳跃的最远距离, 试求出跳跃到数组尾端需要的最少步骤. 如给定 [2,3,1,1,4], 返回2. (从下标0跳到1, 从1跳到下标4). 算法描述: ...
- (转)为C# Windows服务添加安装程序
本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻 ...
- bzoj4542 大数
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...
- Git 安装部署
CentOS6的yum源中已经有git的版本了,可以直接使用yum源进行安装. yum install/remove git 但是yum源中安装的git版本是1.7.1,太老了,Github等需要的G ...
- 12步轻松搞定Python装饰器
译者:寒寻 译文:http://www.cnblogs.com/imshome/p/8327438.html 原文:https://dzone.com/articles/understanding-p ...
- centos7开发环境配置总结
1.win10下SecureCRT SSH连接慢 2.CentOS 7下Samba服务器的安装与配置 3.
- HDFS文件系统
Hadoop 附带了一个名为 HDFS(Hadoop分布式文件系统)的分布式文件系统,专门存储超大数据文件,为整个Hadoop生态圈提供了基础的存储服务. 本章内容: 1) HDFS文件系统的特点,以 ...
- 7_bootstap之综合案例
13.综合案例 13.1.案例需求 要求:页面顶部的三部分在PC屏幕上显示为一行,在移动设备屏幕上显示为一部分一行: 导航条在大屏幕展示全部内容,在移动设备上需要将内容能够折叠/展开: 用户名/密码/ ...
- lnmp架构实现动态php
目录 LNMP动态网站php 1.PHP-FastCGI概述 PHP-FPM安装配置 配置PHP与数据库连接 配置PHP新增扩展模块 配置PHP-FPM主要配置 配置PHP-FPM错误日志 1.编译安 ...