Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以XML作为数据源的单元测试存储库_C#_Asp.net Mvc_Unit Testing_Tdd - Fatal编程技术网

C# 以XML作为数据源的单元测试存储库

C# 以XML作为数据源的单元测试存储库,c#,asp.net-mvc,unit-testing,tdd,C#,Asp.net Mvc,Unit Testing,Tdd,我是一个单元测试noob的人,正在努力寻找一种测试我的存储库的好方法。我创建了一个CustomConfigurationManager,用于加载我的Custom.Config值。但却不知道如何测试它们 我的问题是 如何测试GetUserById()中的代码 如何测试我的CustomConfigurationManager() 这是我正在尝试测试的存储库: public class UserRepository : IUserRepository { public User GetUser

我是一个单元测试noob的人,正在努力寻找一种测试我的存储库的好方法。我创建了一个CustomConfigurationManager,用于加载我的
Custom.Config
值。但却不知道如何测试它们

我的问题是

  • 如何测试
    GetUserById()中的代码
  • 如何测试我的
    CustomConfigurationManager()
  • 这是我正在尝试测试的存储库:

    public class UserRepository : IUserRepository
    {
        public User GetUserById(string id)
        {
            return CustomConfigurationManager.CustomConfig.Users.FirstOrDefault(u => u.UserId == id);
        }
    }
    
    
    public class CustomConfigurationManager
    {
        public static Configs CustomConfig
        {
            get
            {
                return CustomConfigLoader.LoadConfig<Configs>();
            }
        }
    }
    
    internal sealed class ConfigLoader
    {
        public static T LoadConfig<T>() where T : class
        {
            ...
    
            return LoadFromXML<T>();
        }
    }
    
    公共类用户存储库:IUserRepository
    {
    公共用户GetUserById(字符串id)
    {
    返回CustomConfigurationManager.CustomConfig.Users.FirstOrDefault(u=>u.UserId==id);
    }
    }
    公共类CustomConfigurationManager
    {
    公共静态配置CustomConfig
    {
    得到
    {
    返回CustomConfigLoader.LoadConfig();
    }
    }
    }
    内部密封类ConfigLoader
    {
    公共静态T LoadConfig(),其中T:class
    {
    ...
    返回LoadFromXML();
    }
    }
    
    还有XML

     <users>
        <user id="Foo" name="Bar" ... />
        ...
    </users>
    
    
    ...
    

    我粘贴的代码已修改,不是真正的代码。这只是一个例子

    我相信很多人会指出,从精确的意义上讲,如果您正在读取一个文件,那么它不是一个单元测试。真的,你应该以一种更宽松的方式来测试类似的东西,或者找到一种伪造它的方法

    一个应该对你有很大帮助的提示:

    public class UserRepository : IUserRepository
    {
        public Configs CustomConfig {get;set;}
        public User GetUserById(string id)
        {
            return CustomConfig.Users.FirstOrDefault(u => u.UserId == id);
        }
    }
    
    其思想是,通过注入它(可能仅在构造函数中),您可以在不读取文件的情况下测试它。这称为DI(依赖项注入),通常最好使用接口来完成

    CustomConfigurationManager很难测试,因为它调用属性中的另一个静态方法;你可以不用它。这是额外的复杂性,它隐藏了细节,但也隐藏了依赖关系,这是你永远不想做的

    不能在没有内联VISILBTO的情况下测试配置加载程序,但我也认为这是个错误的做法。这个班需要密封吗


    尽量将设计的重点放在使方法工作上,而不在可能的情况下假设具体的实现。如果你发现自己传递的东西太多,你可能需要一个新的类。如果你发现自己一次做了太多的事情,你可能需要更多的方法。

    我相信很多人会指出,从精确的意义上讲,如果你在读一个文件,那就不是单元测试。真的,你应该以一种更宽松的方式来测试类似的东西,或者找到一种伪造它的方法

    一个应该对你有很大帮助的提示:

    public class UserRepository : IUserRepository
    {
        public Configs CustomConfig {get;set;}
        public User GetUserById(string id)
        {
            return CustomConfig.Users.FirstOrDefault(u => u.UserId == id);
        }
    }
    
    其思想是,通过注入它(可能仅在构造函数中),您可以在不读取文件的情况下测试它。这称为DI(依赖项注入),通常最好使用接口来完成

    CustomConfigurationManager很难测试,因为它调用属性中的另一个静态方法;你可以不用它。这是额外的复杂性,它隐藏了细节,但也隐藏了依赖关系,这是你永远不想做的

    不能在没有内联VISILBTO的情况下测试配置加载程序,但我也认为这是个错误的做法。这个班需要密封吗


    尽量将设计的重点放在使方法工作上,而不在可能的情况下假设具体的实现。如果你发现自己传递的东西太多,你可能需要一个新的类。如果你发现自己一次做了太多的事情,你可能需要更多的方法。

    我相信很多人会指出,从精确的意义上讲,如果你在读一个文件,那就不是单元测试。真的,你应该以一种更宽松的方式来测试类似的东西,或者找到一种伪造它的方法

    一个应该对你有很大帮助的提示:

    public class UserRepository : IUserRepository
    {
        public Configs CustomConfig {get;set;}
        public User GetUserById(string id)
        {
            return CustomConfig.Users.FirstOrDefault(u => u.UserId == id);
        }
    }
    
    其思想是,通过注入它(可能仅在构造函数中),您可以在不读取文件的情况下测试它。这称为DI(依赖项注入),通常最好使用接口来完成

    CustomConfigurationManager很难测试,因为它调用属性中的另一个静态方法;你可以不用它。这是额外的复杂性,它隐藏了细节,但也隐藏了依赖关系,这是你永远不想做的

    不能在没有内联VISILBTO的情况下测试配置加载程序,但我也认为这是个错误的做法。这个班需要密封吗


    尽量将设计的重点放在使方法工作上,而不在可能的情况下假设具体的实现。如果你发现自己传递的东西太多,你可能需要一个新的类。如果你发现自己一次做了太多的事情,你可能需要更多的方法。

    我相信很多人会指出,从精确的意义上讲,如果你在读一个文件,那就不是单元测试。真的,你应该以一种更宽松的方式来测试类似的东西,或者找到一种伪造它的方法

    一个应该对你有很大帮助的提示:

    public class UserRepository : IUserRepository
    {
        public Configs CustomConfig {get;set;}
        public User GetUserById(string id)
        {
            return CustomConfig.Users.FirstOrDefault(u => u.UserId == id);
        }
    }
    
    其思想是,通过注入它(可能仅在构造函数中),您可以在不读取文件的情况下测试它。这称为DI(依赖项注入),通常最好使用接口来完成

    CustomConfigurationManager很难测试,因为它调用属性中的另一个静态方法;你可以不用它。这是额外的复杂性,它隐藏了细节,但也隐藏了依赖关系,这是你永远不想做的

    不能在没有内联VISILBTO的情况下测试配置加载程序,但我也认为这是个错误的做法。这个班需要密封吗


    尽量将设计的重点放在使方法工作上,而不在可能的情况下假设具体的实现。如果你发现自己传递的东西太多,你可能需要一个新的类。如果您发现自己一次做的事情太多,您可能需要更多的方法。

    您是否考虑过依靠集成测试来证明您的存储库工作正常?你可以创建一个模拟数据库来测试你的存储库方法,但是你仍然需要用一个真实的数据库来测试它们