使用Microsoft伪造品伪造静态/单一类/方法

用户名

我有一个具有私有构造函数并通过公共静态方法访问的类(单例类)。无法伪造此类的单例对象。

public class MyBusinessManager : BusinessManager
{
 private MyBusinessManager objMyBusinessManager;

 private MyBusinessManager (MyBusinessManager dvqsDataManager)
        {
           objMyBusinessManager= dvqsDataManager;
        }
 public static MyBusinessManager GetInstance() // out
        {
            MyBusinessManager dvqsDataMgr = new MyBusinessManager();

            return new MyBusinessManager (dvqsDataMgr);
        }

 public bool MyBusinessManagerMethod (int bm)
       {
              if(bm == 0)
                 return true;

              return false;
       }
 }

我想测试以下方法:

public class MyService
{
   public bool MyServiceMethod(int serviceParam)
   {
        MyBusinessManager dvqBusinessManager = MyBusinessManager.GetInstance(); // make fake call
        return dvqBusinessManager.MyBusinessManagerMethod(serviceParam); // make fake service call
   }
}

我的测试班:

[TestClass]
public class MyService_UT
{
  [TestMethod]
  public void TestMethod1()
  {
      using (ShimsContext.Create())
      {
        ShimMyBusinessManager.GetInstance = () => { return new ShimMyBusinessManager(); };
        ShimMyBusinessManager.AllInstances.MyServiceMethodInt32 = (a) =>{
                               return true;
                                 }
       MyService obj = new MyService();
       Assert.IsTrue(obj.MyServiceMethod(1))// doesn't call fake method
       }
  } 
}

在这种情况下如何调用假方法?无法使用此代码创建伪造的实例。

瓦伦丁

我建议将创建dvqBusinessManager方法移到该方法之外。

这条路

    MyBusinessManager dvqBusinessManager = MyBusinessManager.GetInstance();
    public bool MyServiceMethod(int serviceParam)
    {
        return dvqBusinessManager.MyBusinessManagerMethod(serviceParam); // make fake service call
    }

或者

    public bool MyServiceMethod(int serviceParam)
    {
        MyBusinessManager dvqBusinessManager = MyBusinessManager.GetInstance();
        MyServiceTestableMethod(dvqBusinessManager, serviceParam);
    }

    public bool MyServiceTestableMethod(MyBusinessManager manager, int serviceParam)
    {
        return manager.MyBusinessManagerMethod(serviceParam);
    }

因此,您可以将伪造的对象注入到方法中并对其进行测试,而无需调用GetInstance方法。

或者,您可以实现并使用工厂模式,并在其中隐藏静态调用。

    public interface IServiceFactory 
    {
        MyBusinessManager GetInstance();
    }

    public class ServiceFactory : IServiceFactory
    {
        public MyBusinessManager GetInstance()
        {
            return MyBusinessManager.GetInstance();
        }
    }

    IServiceFactory factory = new ServiceFactory();
    public bool MyServiceMethod(int serviceParam)
    {
        MyBusinessManager dvqBusinessManager = factory.GetInstance();
        dvqBusinessManager.MyBusinessManagerMethod(serviceParam);
    }

但是,如果您仍想模拟静态调用而不更改代码,则应使用此示例中的Shims,如http://www.richonsoftware.com/post/2012/04/05/using-stubs-and-shim-to在Microsoft-fakes-in-visual-studio-11.aspx中进行测试

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Microsoft伪造品生成UnitTestIsolationException

来自分类Dev

伪造品为什么执行真实方法?

来自分类Dev

FFmpeg贿赂之间的伪造品

来自分类Dev

MSBuild可以在Microsoft Build Tools 2015中构建MS伪造品吗

来自分类Dev

WPF / .NET:我不能用伪造品完全取代具体的类吗?

来自分类Dev

无法使用伪造品调试单元测试用例

来自分类Dev

Microsoft伪造品和TFS 2012 Visual Studio测试运行器-单元测试偶尔会失败

来自分类Dev

将Moq C#代码转换为等效的c#Microsoft伪造品以进行单元测试

来自分类Dev

如何使用FakeItEasy伪造基类方法

来自分类Dev

如何使用MSTEST对ASP.NET CORE控制器进行单元测试并添加伪造品

来自分类Dev

MS伪造使用私有构造函数返回类的静态方法

来自分类Dev

是否可以将Unity配置为针对未注册的接口自动返回伪造品?

来自分类Dev

并行运行测试时,FakeItEasy有时无法创建伪造品

来自分类Dev

FakeFlashFraud(f3)-伪造品有哪些不同类型?

来自分类Dev

如何使用Microsoft伪造的Shim异步任务方法?

来自分类Dev

如何在“创建”功能中运行子程序,以及如何为图表“系列”制作模拟/存根/伪造品?

来自分类Dev

如何使用powerMock在同一类中模拟静态方法和非静态方法?

来自分类Dev

在同一类的方法内使用类的静态成员变量

来自分类Dev

一类的静态功能

来自分类Dev

无法运行使用Microsoft伪造的单元测试-ShimsContext.Create()方法中的异常

来自分类Dev

无法运行使用Microsoft伪造的单元测试-ShimsContext.Create()方法中的异常

来自分类Dev

不能在电子伪造中使用静态文件

来自分类Dev

如何在不重新编译的情况下使用模板化方法伪造类?

来自分类Dev

我想在“单一类别”列中使用OneHotEncoder

来自分类Dev

如何使用这种全速捕获代码仅处理单一类型的崩溃

来自分类Dev

伪造属性时如何指定要使用的类?

来自分类Dev

Kotlin-非单一类的单个实例?

来自分类Dev

Ruby:单一类型元素的数组

来自分类Dev

Ruby:单一类型元素的数组

Related 相关文章

  1. 1

    Microsoft伪造品生成UnitTestIsolationException

  2. 2

    伪造品为什么执行真实方法?

  3. 3

    FFmpeg贿赂之间的伪造品

  4. 4

    MSBuild可以在Microsoft Build Tools 2015中构建MS伪造品吗

  5. 5

    WPF / .NET:我不能用伪造品完全取代具体的类吗?

  6. 6

    无法使用伪造品调试单元测试用例

  7. 7

    Microsoft伪造品和TFS 2012 Visual Studio测试运行器-单元测试偶尔会失败

  8. 8

    将Moq C#代码转换为等效的c#Microsoft伪造品以进行单元测试

  9. 9

    如何使用FakeItEasy伪造基类方法

  10. 10

    如何使用MSTEST对ASP.NET CORE控制器进行单元测试并添加伪造品

  11. 11

    MS伪造使用私有构造函数返回类的静态方法

  12. 12

    是否可以将Unity配置为针对未注册的接口自动返回伪造品?

  13. 13

    并行运行测试时,FakeItEasy有时无法创建伪造品

  14. 14

    FakeFlashFraud(f3)-伪造品有哪些不同类型?

  15. 15

    如何使用Microsoft伪造的Shim异步任务方法?

  16. 16

    如何在“创建”功能中运行子程序,以及如何为图表“系列”制作模拟/存根/伪造品?

  17. 17

    如何使用powerMock在同一类中模拟静态方法和非静态方法?

  18. 18

    在同一类的方法内使用类的静态成员变量

  19. 19

    一类的静态功能

  20. 20

    无法运行使用Microsoft伪造的单元测试-ShimsContext.Create()方法中的异常

  21. 21

    无法运行使用Microsoft伪造的单元测试-ShimsContext.Create()方法中的异常

  22. 22

    不能在电子伪造中使用静态文件

  23. 23

    如何在不重新编译的情况下使用模板化方法伪造类?

  24. 24

    我想在“单一类别”列中使用OneHotEncoder

  25. 25

    如何使用这种全速捕获代码仅处理单一类型的崩溃

  26. 26

    伪造属性时如何指定要使用的类?

  27. 27

    Kotlin-非单一类的单个实例?

  28. 28

    Ruby:单一类型元素的数组

  29. 29

    Ruby:单一类型元素的数组

热门标签

归档