我的团队非常喜欢使用区域,考虑到这一点,它几乎成为我们代码中事实上的标准.我最近意识到,每次创建类,测试方法等时,我都会厌倦写或ctrl + c/ctrl + v'ing这些...
我想知道是否有可能(通过宏或其他功能)让Visual Studio自动将这些添加到您的代码中.
例如,如果我向项目添加一个新的类文件,你可以执行某种魔术让visual studio生成文件:
namespace Test
{
class MyClass
{
#region ------------ members --------------
#endregion
#region ------------ properties --------------
#endregion
#region ------------ methods --------------
#endregion
}
}
Run Code Online (Sandbox Code Playgroud)
我真的对目前不知道如何做到这一点感到恼火,那就是我正在编写单元测试.这可能有点棘手,但我试图找到一种方法来自动添加--set up--和--run test--区域测试方法,因为我们的团队坚持使用它们.
所以,当我去创建一个新的测试方法时
[TestMethod]
public void WhenCondition_WillProduceExpectedResult()
{
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio会自动将这两个区域添加到方法中,例如:
[TestMethod]
public void WhenCondition_WillProduceExpectedResult()
{
#region ------------- set up -------------
#endregion
#region ------------- run test -------------
#endregion
}
Run Code Online (Sandbox Code Playgroud)
不确定是否可以这样做,如果可以的话,是通过vs-macro还是扩展.任何帮助深表感谢!
这篇文章更像是一个讨论的开始,因为我对单元测试和 TDD 有点陌生。
我目前正在为与多个数据库交互的 .NET 进程编写一些单元测试,并且正在使用模拟数据库上下文来尝试覆盖我的测试中的不同边缘情况,验证程序本身中的异常处理等。话虽如此,我的一些单元测试使用有效数据,而另一些则不使用。
在将有效/虚假数据添加到模拟数据库上下文时,我正在寻找有关建议最佳实践的反馈。我已经看到人们通过多种方式执行此操作(例如 - 实现存储库模式,将模拟数据添加到 .csv 文件并使它们成为项目的一部分,等等......)。
我目前正在考虑使用存储库模式将Survey对象添加到Surveys目标数据库中的表中。
首先,我有接口:
public interface ISurveyRepository
{
IQueryable<Survey> SurveySeries { get; }
}
Run Code Online (Sandbox Code Playgroud)
这是根据单元测试的需要为模拟假/有效数据存储库实现的
class FakeSurveyRepository : ISurveyRepository
{
private static IQueryable<Survey> fakeSurveySeries = new List<Survey> {
new Survey { id = 1, SurveyName="NotValid1", SurveyData="<data>fake</data>"},
new Survey { id = 2, SurveyName="NotValid2", SurveyData="<data>super fake</data>"},
.........,
new Survey {id = 10, SurveyName="NotValid10", SurveyData="<data>the fakest</data>" }
}.AsQueryable();
public IQueryable<Survey> SurveySeries
{
get { return fakeSurveySeries; }
}
} …Run Code Online (Sandbox Code Playgroud) 我目前正在使用LINQ-> Entites w/Entity Framework v 4.2和T4生成的对象上下文遇到问题.我对LINQ查询在针对数据库执行之前如何转换为存储表达式相对了解,但我绝不是专家.据我所知,所使用的.NET函数在T-SQL中转换为它们的等价物,而那些没有等价物的函数(例如String.Format())将System.NotSupportedException在运行时抛出.
在我的动态LINQ查询中,我DateTime.Now.AddMinutes()用来过滤掉我的结果集:
public void ExecuteSearch()
{
var timeElapsedTresholdInMinutes = Convert.ToInt32( ConfigurationManager.AppSettings.Get("TimeElapsedThresholdInMinutes") );
var resultSet = ( from entity in _dbContext.EntityCollection
where /*non-date-related where clause stuff*/
&&
entity.DateAdded <= DateTime.Now.AddMinutes(-1 * timeElapsedThresholdInMinutes)
select entity);
/* do something with resultSet */
}
Run Code Online (Sandbox Code Playgroud)
在运行时,我得到了 System.NotSupportedException: LINQ to Entities does not recognize the method DateTime.Now.AddMinutes() method and this method cannot be translated into a store expression.
比方说,我的timeElapsedThreshold在评估后的值为-30.有谁知道为什么这不会映射到DATEADD(MINUTE,-30,GETDATE());?这里有什么我想念的吗?
当然,我可以将我的代码转换为:
public void ExecuteSearch() …Run Code Online (Sandbox Code Playgroud)