【发布时间】:2019-07-19 19:53:18
【问题描述】:
我修改了一些代码并设置了一个断点,但是当调试器遇到该断点时,它会发疯并运行旧代码!
这是原始代码:
/// <summary>
/// Creates a new <see cref="CommaSeparatedValue"/> for the specified values.
/// </summary>
/// <param name="values"></param>
public CommaSeparatedValue(params object[] values)
{
List<string> list = new List<string>();
foreach (var value in values)
{
if (value is IEnumerable)
{
foreach (var item in (IEnumerable)value)
{
list.Add(Scrub(item));
}
}
else
{
list.Add(Scrub(value));
}
}
_List = list;
}
我把它改成什么:
/// <summary>
/// Creates a new <see cref="CommaSeparatedValue"/> for the specified values.
/// </summary>
/// <param name="values"></param>
public CommaSeparatedValue(params object[] values)
{
List<string> list = new List<string>();
foreach (var value in values)
{
if (value is IEnumerable && !(value is string)) // !!! - I changed this line here
{
foreach (var item in (IEnumerable)value)
{
list.Add(Scrub(item));
}
}
else
{
list.Add(Scrub(value));
}
}
_List = list;
}
我在我修改的行上设置断点(检查字符串值),当调试器命中该行时,它会忽略我添加的部分并继续运行到“if”块,即使value 变量是一个字符串。
如果重要的话,这段代码是从 MSTest 单元测试中运行的。
【问题讨论】:
-
在黑暗中拍摄,但您是否尝试过查看您的 Visual Studio 是否有任何更新?我知道如果我有一段时间没有更新它,我的行为有时会很奇怪。
-
我有一种感觉,当您正在调试的项目在您修改代码后没有构建时,我看到了这种行为。查看配置管理器并确保选中“构建”。
-
进行清理,然后重建。
-
无法在 MsTest(.net core) 项目模板中重现相同的问题。请:1。确保您处于调试模式并且不要检查优化代码为调试模式。(Project=>Properties=>Build=>优化代码) 2.在调试
test explorer中的测试项目之前重建项目@跨度> -
@peterG 啊哈,你是对的 - 单元测试项目不是解决方案构建的一部分!您为什么不将您的评论作为答案发布,以便可以解决此帖子? :)
标签: c# unit-testing debugging mstest visual-studio-2019