首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从VB .NET中的单独项目中对私有函数进行单元测试?

在VB .NET中,对私有函数进行单元测试的方法是通过使用反射。以下是一个简单的步骤说明:

  1. 首先,确保你已经安装了一个单元测试框架,例如NUnit或xUnit.NET。
  2. 在你的测试类中,创建一个测试方法,例如TestPrivateMethod()
  3. 使用BindingFlags.NonPublicBindingFlags.Instance来获取私有函数的方法信息。
  4. 使用MethodInfo.Invoke()方法来调用私有函数。
  5. 使用断言(assertions)来验证私有函数的返回值是否符合预期。

以下是一个示例代码:

代码语言:vb
复制
Imports System.Reflection
Imports NUnit.Framework

<TestFixture>
Public Class PrivateMethodTest

    <Test>
    Public Sub TestPrivateMethod()
        Dim obj As New MyClass()
        Dim methodInfo As MethodInfo = GetType(MyClass).GetMethod("MyPrivateMethod", BindingFlags.NonPublic Or BindingFlags.Instance)

        Dim result As Object = methodInfo.Invoke(obj, New Object() {10})

        Assert.AreEqual(20, result)
    End Sub

End Class

Public Class MyClass

    Private Function MyPrivateMethod(ByVal value As Integer) As Integer
        Return value * 2
    End Function

End Class

在这个示例中,我们创建了一个名为PrivateMethodTest的测试类,其中包含一个名为TestPrivateMethod()的测试方法。我们使用BindingFlags.NonPublicBindingFlags.Instance标志来获取MyClass类中名为MyPrivateMethod的私有函数的MethodInfo对象。然后,我们使用MethodInfo.Invoke()方法来调用私有函数,并使用断言来验证返回值是否符合预期。

请注意,虽然这种方法可以对私有函数进行单元测试,但它可能会破坏封装原则。因此,在使用这种方法时,请确保权衡利弊。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Visual Studio 2017 15.7 下.NET Core

一. .NET Core相关主要内容 1. 大型. NET Core项目中缩短了智能感知25%时间。 2.C# 7.3 支持 3. ...我们改进了 c# 和 VB 项目的解决方案加载时间。 我们f# 及其工具进行了大量更新, 重点关注性能。 我们缩短了时间, 以便为大型. NET 核心项目启用智能感知25%。...我们进行了快速信息改进和新. NET 重构, 如转换for到-foreach并使私有字段readonly....测试资源管理器在测试运行期间有更多响应图标。 c++ 开发人员可以使用CodeLens 进行单元测试. 我们添加了 c++核心指南中执行项目的新规则。....当不需要解决方案或项目重新加载时, 我们Git 分支签出删除了阻止模式对话框。 在Git 中有一个选项可在 OpenSSL 和 SChannel 之间进行选择.

3K50

Visual Studio 2017 15.7 下.NET Core

一. .NET Core相关主要内容 1. 大型. NET Core项目中缩短了智能感知25%时间。 2.C# 7.3 支持 3. ...我们改进了 c# 和 VB 项目的解决方案加载时间。 我们f# 及其工具进行了大量更新, 重点关注性能。 我们缩短了时间, 以便为大型. NET 核心项目启用智能感知25%。...我们进行了快速信息改进和新. NET 重构, 如转换for到-foreach并使私有字段readonly....测试资源管理器在测试运行期间有更多响应图标。 c++ 开发人员可以使用CodeLens 进行单元测试. 我们添加了 c++核心指南中执行项目的新规则。....当不需要解决方案或项目重新加载时, 我们Git 分支签出删除了阻止模式对话框。 在Git 中有一个选项可在 OpenSSL 和 SChannel 之间进行选择.

3.2K80

重温《单元测试艺术》,总结常用知识点

项目进行单元测试好处非常容易理解:单元测试降低了 Bug 数量,缩短了上市时间,防止过度耦合设计。这些都是很好优势,但它还有更多与开发人员更直接相关优点。...6.1 Stub(存根) 一个存根(stub)是系统存在一个依赖(又或者协作者)可控制替代物。通过使用存根,你在测试代码无需直接处理这个依赖。...模拟对象创建到测试方式结束,这个模拟对象所有调用都会自动记录,保存供后来使用。...8.2 如何测试私有方法 私有方法通常比较难测试,不过你可以这么想:私有方法不会无缘无故地存在,最终在某个地方有公共方法会调用这个私有方法。...看到一个私有方法时候,你应该找到使用这个方法公共用例并这个公共用例进行测试。 如果一个私有方法真的值得进行测试,那么它也许应该设为公共,静态。有几种方式处理私有方法: 使方法成为公共方法。

1.5K31

VisualStudio单元测试

这篇文章实践使用VisualStudio 2019进行单元测试。 在VisualStudio通常都会使用“测试资源管理器”进行单元测试。 ?...Live Unit Testing 是 Visual Studio 2017 引入一种技术。 进行代码更改时,它会自动执行单元测试。 实时单元测试: 让你更有信心地代码进行重构和更改。...填充码可用于替换对无法修改程序集(如 .NET 程序集)调用。 一般原则是,为在 Visual Studio 解决方案中进行调用使用存根,并为其他引用程序集调用使用填充码。...存根和填充码都可用于可通过程序集特性 InternalsVisibleToAttribute 访问内部类型。 私有方法。 如果方法签名所有类型都是可见,则填充码可替换对私有方法调用。...; } } 由于它依赖于DateTime.Now,而假设我们没办法更改这段代码,为了进行单元测试我们必须使用Shim破除DateTime.Now依赖。

3.6K50

如何写出优雅 Golang 代码

,当然严格遵循公有和私有代码划分是非常好做法,作者也建议各位开发者目中公有和私有的代码进行妥善划分。...模块拆分 我们既然已经介绍过了如何顶层项目的结构进行组织,接下来就会深入到项目的内部介绍 Go 语言对模块一些拆分方法。...如何控制待测试方法依赖模块是写单元测试时至关重要,控制依赖也就是目标函数依赖进行 Mock 消灭不确定性,为了减少每一个单元测试复杂度,我们需要: 尽可能减少目标方法依赖,让目标方法只依赖必要模块...组织方式 如何测试进行组织也是一个值得讨论的话题,Golang 单元测试文件和代码都是与源代码放在同一个目录下按照 package 进行组织,server.go 文件对应测试代码应该放在同一目录下...Mock 方法 项目中单元测试应该是稳定并且不依赖任何外部项目,它只是目中函数和方法测试,所以我们需要在单元测试所有的第三方不稳定依赖进行 Mock,也就是模拟这些第三方服务接口;除此之外

1.6K30

如何写出优雅 Golang 代码

,当然严格遵循公有和私有代码划分是非常好做法,作者也建议各位开发者目中公有和私有的代码进行妥善划分。...模块拆分 我们既然已经介绍过了如何顶层项目的结构进行组织,接下来就会深入到项目的内部介绍 Go 语言对模块一些拆分方法。... 如何控制待测试方法依赖模块是写单元测试时至关重要,控制依赖也就是目标函数依赖进行 Mock 消灭不确定性,为了减少每一个单元测试复杂度,我们需要: 尽可能减少目标方法依赖,让目标方法只依赖必要模块...组织方式 如何测试进行组织也是一个值得讨论的话题,Golang 单元测试文件和代码都是与源代码放在同一个目录下按照 package 进行组织,server.go 文件对应测试代码应该放在同一目录下...Mock 方法 项目中单元测试应该是稳定并且不依赖任何外部项目,它只是目中函数和方法测试,所以我们需要在单元测试所有的第三方不稳定依赖进行 Mock,也就是模拟这些第三方服务接口;除此之外

1K30

.NET面试经典三问:什么是.NET?什么是.NET Framework?什么是.NET Core?

C#就是为宣传.NET而创立,它直接集成于Visual Studio .NETVB也在.NET 1.0发布后进行支持, 所以这两门语言与.NET平台耦合度很高,并且.NET技术大多都是以C...比如我在vb写了一个针对String首字母大写扩展方法,将其编译后dll引用至C#项目中。..."不明确,这是因为在vb类名是不区分大小写。...] CLS类型、命名、事件、属性、数组等方面对语言进行了共性定义及规范。...答案是可以尝试,如用vb反射访问c#char*指针类型,即使vb没有char*这种等价指针类型,但mscorlib提供了针对指针类型 Pointer 包装类供其访问,可以运行时类携带类型名称看到其原本类型名

89441

从零开始针对 .NET 应用 DevOps 运营实践 - 运行环境搭建

):作为持续交付延伸,持续部署能够自动将最终代码部署到生产环境,完成整个 CI/CD 流程 虽然目前需求仅仅是为了实现持续集成,完成对于系统自动化代码检查、自动化单元测试,但是因为后续功能对于我们完整实施...DevOps 方法论也是必须,所以在这几篇博客内容,我也会完成对于后续功能实践分享 3.2、前期调研 与持续集成场景存在一些差异,我们在实际开发,并不会在新功能分支上按照每个开发人员再建立单独分支...因此,作为事实上开源 CI/CD 工具标准,毫无疑问选择 Jenkins,而对于代码自动化检查,结合我们需要实现私有化部署,满足多种开发语言支持、能够与 CI/CD 工具进行有效结合需求,这里最终选择是...SonarQube 由于历史原因,部门系统框架版本横跨了 VB.NET、.NET Framework 2.x,4.x 与 .NET Core,.NET 框架程序涵盖了 Web Form、MVC、Web...VS 2019 下载页面进行示例,在 Visual Studio 2019 工具这个内容块,找到生成工具这个下载,下载即可 ?

80631

从零开始针对 .NET 应用 DevOps 运营实践 - 运行环境搭建

):作为持续交付延伸,持续部署能够自动将最终代码部署到生产环境,完成整个 CI/CD 流程 虽然目前需求仅仅是为了实现持续集成,完成对于系统自动化代码检查、自动化单元测试,但是因为后续功能对于我们完整实施...DevOps 方法论也是必须,所以在这几篇博客内容,我也会完成对于后续功能实践分享 3.2、前期调研 与持续集成场景存在一些差异,我们在实际开发,并不会在新功能分支上按照每个开发人员再建立单独分支...因此,作为事实上开源 CI/CD 工具标准,毫无疑问选择 Jenkins,而对于代码自动化检查,结合我们需要实现私有化部署,满足多种开发语言支持、能够与 CI/CD 工具进行有效结合需求,这里最终选择是...SonarQube 由于历史原因,部门系统框架版本横跨了 VB.NET、.NET Framework 2.x,4.x 与 .NET Core,.NET 框架程序涵盖了 Web Form、MVC、Web...VS 2019 下载页面进行示例,在 Visual Studio 2019 工具这个内容块,找到生成工具这个下载,下载即可 ?

74531

ASP.NET MVC 4 - 测试驱动 ASP.NET MVC

图 2 解决方案结构示例 我建议将您控制器放置于一个单独 Visual Studio 项目中。有关如何轻松实现此建议信息,请参见 bit.ly/K4mF2B 上博客文章。...通过将您控制器放置于单独目中,您可以进一步将处于控制器逻辑与 UI 代码分离开来。结果就是您 Web 项目仅包含真正与 UI 相关代码。...在哪里放置您测试项目 在哪里放置您测试项目以及如何这些项目进行命名十分重要。在您开发复杂、企业级应用程序时,解决方案往往会变得相当大,因此,很难在解决方案资源管理器定位代码特定类或部分。...图 4 解决方案资源管理器测试项目 介绍针对您体系结构依赖关系注入 在您待测试代码遇到依赖关系前, n 层应用程序进行单元测试不会前进多远。...使用 StructureMap 配置依赖关系 在 ASP.NET MVC 实现 StructureMap 第一步是配置您依赖关系,以便 StructureMap 知道如何它们进行解析。

5.4K70

VB.NET“偷懒”技巧

开发岗位,但偏偏给我第一份编程工作竟然是改VB.NET程序,VB是一种过气语言(各大招聘网站招聘广告中看就能看出来,100份招人最多有一、两份是提到VB),很多新程序员估计连Basic是什么都未必清楚...VB.NET需要依赖环境,而且一些必要dll文件没有放在该有的位置,另外,原程序员明明正确配置文件,竟然在“击鼓传花”式传递过程莫名越改越错,导致有用数据被认为是完全无用干脆删掉了。...1、充分利用VB.NET自身提供功能 比如下图是鼠标右键弹出界面,红色部分可以帮程序员很好了解程序函数如何定义,并了解整个项目中到底有多少个地方调用了该函数。...黄色部分需要装.NET Reflector反编译软件(网上有如何安装),当点击“转到定义”时,如果是VB函数,可看到源码。其实,我用它看不是VB源码,而是软件中被程序员自己编写dll文件。...如果不想让人在启动里面看到,也可以写成配置文件,然后用命令加载,写成任务计划,当系统启动时,触发任务,打开软件。 6.jpg 写任务计划示例: <?

2.3K130

关于单元测试

如果把这些内容统统外部“注入”,这样私有的逻辑就变公开了……但是这样难道没有过渡设计味道吗?”。 然后就想起来我在项目中推动单元测试经过。觉得还是应该总结一下比较好。...单元测试对重构帮助不如预期 正如前面所说,我目前负责目中,较大重构发生次数并不多。小规模重构确实有单元测试帮助我发现问题情况。但是,远不像我预期那么多。...而经常出问题代码,往往因为和平台关系太密切,而无法切割出来进行单元测试。 ASP.NET MVC在一开始设计时候就考虑了可测试性,因此,这一方面应该更好一些。...如果这个函数具有了变化和复用可能性,我们就应该将它抽象为一个独立对象,并且进行测试。这是一个更好设计,而不应该归入过度设计范畴。...因为,理论上重构过程不需要保持私有成员行为不变。但是,你单元测试又要求私有成员行为不变。这个其实就是我上文中提到单元测试影响了重构进行情况。

73980

【5min+】为你.NET应用进行一次全方位体检

它所包含了.net体系可能会涉及到方方面面,比如C#小细节,AspnetCore,微服务.net知识等等。...所以,此时就需要咱们引入“单元测试”了。当一个方法被多个地方使用,过早该方法进行单元测试,将会大幅度减少bug产生。 在.NET Core中使用单元测试也很简单,直接新建一个测试项目就可以了。...Pipelines中新建一个Pipelines: [Pipelines] [x] 我这里选择是Github代码库,然后下一步进行选择,选择会有几个模板供您选择,您可以随意选择一个AspNet Core...在下面的图片中,表示了一个.NET Core程序进行“自动生成->测试->生成代码覆盖率”job,您可以根据您自身情况进行参考和更改: [x] [x] 然后提交该配置。...最后 说几个大家可能在单元测试过程可能涉及到几个小点: 有时候您会测试一个internal级别的类,但是当测试项目引用之后是没有办法找到该类,您可以通过将程序集标记为测试项目可见来进行测试: [

59510

【5min+】为你.NET应用进行一次全方位体检

它所包含了.net体系可能会涉及到方方面面,比如C#小细节,AspnetCore,微服务.net知识等等。...所以,此时就需要咱们引入“单元测试”了。当一个方法被多个地方使用,过早该方法进行单元测试,将会大幅度减少bug产生。 在.NET Core中使用单元测试也很简单,直接新建一个测试项目就可以了。...我这里选择是Github代码库,然后下一步进行选择,选择会有几个模板供您选择,您可以随意选择一个AspNet Core模板,然后进行下一步进行配置。...在下面的图片中,表示了一个.NET Core程序进行“自动生成->测试->生成代码覆盖率”job,您可以根据您自身情况进行参考和更改: ? ? 然后提交该配置。...最后 说几个大家可能在单元测试过程可能涉及到几个小点: 有时候您会测试一个internal级别的类,但是当测试项目引用之后是没有办法找到该类,您可以通过将程序集标记为测试项目可见来进行测试: [

57330

Lightweight Test Automation Framework之旅

自动化测试弹出窗口:之前版本无法测试弹出窗口,相对于WatiN和Selenium等来说是一个硬伤,老赵在对ASP.NET MVC项目中视图做单元测试中曾认为这是一个永远无法弥补缺点。...这意味着我们在测试代码和被测试网页分别在不同进程。在这个前提下,如果我们要将测试代码定义数据传递给被测试网页(也就是视图对象),我们就必须进行跨进程通信。...如何在asp.net mvc项目中应用Lightweight Test Automation Framework ASP.NET QA 团队说Lightweight Test Automation Framework...是针对“asp.net”设计,现在asp.net多出来了asp.net mvc,经验来看Lightweight Test Automation Framework并没有缺省支持asp.net mvc.../{*pathInfo}"); 参考文章: Using Lightweight Test Automation Framework ASP.NET MVC项目中视图做单元测试 Using HtmlUnit

1.8K90

编写rust测试程序

这么做有几个好处: 节省构建代码时编译时间 减小编译出可执行文件体积 其实集成测试就不需要这个标注,因为它们被放入单独目录文件,而单元测试是跟正常逻辑代码在同一个文件,因此必须进行特殊标注...测试私有函数 关于私有函数能否被直接测试,编程社区里一直争论不休,甚至于部分语言可能都不支持私有函数进行测试或者难以测试。无论你立场如何,反正 Rust 是支持私有函数进行测试。...(4, internal_adder(2, 2)); } } 但是在上述代码,我们使用 use super:; 将 tests 父模块所有内容引入到当前作用域中,这样就可以非常简单实现私有函数测试...如果说单元测试代码单元进行测试,那集成测试则是某一个功能或者接口进行测试,因此单元测试通过,并不意味着集成测试就能通过:局部上反映不出问题,在全局上很可能会暴露出来。...这就是为何我们需要将代码逻辑 src/main.rs 剥离出去放入 lib 包,例如很多 Rust 项目中都同时有 src/main.rs 和 src/lib.rs ,前者只保留代码主体脉络部分

1.2K20
领券