Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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#如何在调试中命中一个方法_C#_Asp.net Core - Fatal编程技术网

C#如何在调试中命中一个方法

C#如何在调试中命中一个方法,c#,asp.net-core,C#,Asp.net Core,可能不是一个好标题,这个问题可能很愚蠢,但我真的不知道怎么做 我创建了一个项目,它连接到一个带有EF核心的DB。我已经创建了DbContext类和执行实际查询的Repository类 然后我创建了另一个类,可能是我创建错了,但我使它类似于MVC项目的控制器。这是我的班级: public class ExtractCustomersToBeMarked { private ICampaignRepository _repository; privat

可能不是一个好标题,这个问题可能很愚蠢,但我真的不知道怎么做

我创建了一个项目,它连接到一个带有EF核心的DB。我已经创建了DbContext类和执行实际查询的Repository类

然后我创建了另一个类,可能是我创建错了,但我使它类似于MVC项目的控制器。这是我的班级:

    public class ExtractCustomersToBeMarked
    {
        private ICampaignRepository _repository;
        private ILogger<ExtractCustomersToBeMarked> _logger;

        public ExtractCustomersToBeMarked(ILogger<ExtractCustomersToBeMarked> logger, ICampaignRepository repository)
        {
            _repository = repository;
            _logger = logger;
        }
        public async Task ExtractCustomers()
        {
            IEnumerable<CampaignKnownCustomers> result = _repository.getCustomersGUID();               
           ... I want to debug this code
        }
    }
我知道它看起来不太好,这个结构只是为了调试。如果还有别的办法,我愿意听听


如何在
ExtractCustomers
上点击调试器?

我想您已经实现了一个
活动存储库
类。如果要在调试
ExtractCustomers()
方法时使用此实现,只需创建它的实例并传递给该方法:

static void Main(string[] args)
{
   ExtractCustomersToBeMarked ectm = new ExtractCustomersToBeMarked(null, new CampaignRepository());
   ectm.ExtractCustomers().Wait();
}
记录器也是如此。如果在要调试的方法中使用记录器,请创建实现
ILogger
的类的实例。创建实例时,不要忘记将其传递给
提取器CustomersTobemarked
类的构造函数


您可能希望实现集成测试,而不是修改应用程序本身的
Main()
方法,但这是另一回事。

摘要我建议针对要调试的代码编写单元测试

详细信息当您准备好单元测试时,您可以在“调试”下运行每个单独的测试,这样您就可以像调试应用程序一样逐步完成代码;但是有了定义测试范围和上下文的好处,例如,您可以独立于其他部分测试系统的独立部分

一旦测试到位,它可以缩短代码+调试迭代周期所花费的时间,使您的工作效率更高。它实现了这一点,因为测试会在测试场景已经设置好的情况下直接启动相关代码,而不是启动整个应用程序,并且每次都会导航到相关部分以进入所需的场景


这些测试的另一个好处(如果它们是以正确的方式编写的)是,您可以使它们作为自动构建的一部分运行,每当有人更改某些代码时就会触发自动构建。这意味着,如果有人破坏了该代码,测试将失败,构建也将失败。

是否传入实现的ILogger和ICampaignRepository具体类?既然您创建了它,您应该知道?创建一个单元测试,使用您的依赖项的模拟实现
static void Main(string[] args)
{
   ExtractCustomersToBeMarked ectm = new ExtractCustomersToBeMarked(null, new CampaignRepository());
   ectm.ExtractCustomers().Wait();
}