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