我试图处理单元测试一个非常简单的ASP.NET MVC测试应用程序,我使用最新的EF4 CTP中的Code First方法构建.我对单元测试/模拟等不太熟悉.
这是我的Repository类:
public class WeightTrackerRepository
{
public WeightTrackerRepository()
{
_context = new WeightTrackerContext();
}
public WeightTrackerRepository(IWeightTrackerContext context)
{
_context = context;
}
IWeightTrackerContext _context;
public List<WeightEntry> GetAllWeightEntries()
{
return _context.WeightEntries.ToList();
}
public WeightEntry AddWeightEntry(WeightEntry entry)
{
_context.WeightEntries.Add(entry);
_context.SaveChanges();
return entry;
}
}
Run Code Online (Sandbox Code Playgroud)
这是IWeightTrackerContext
public interface IWeightTrackerContext
{
DbSet<WeightEntry> WeightEntries { get; set; }
int SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
......及其实现,WeightTrackerContext
public class WeightTrackerContext : DbContext, IWeightTrackerContext
{
public DbSet<WeightEntry> WeightEntries { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我有以下内容:
[TestMethod]
public void Get_All_Weight_Entries_Returns_All_Weight_Entries() …
Run Code Online (Sandbox Code Playgroud) 这可能看起来有点颠倒,但我想要做的是通过其Description属性从枚举中获取枚举值.
所以,如果我有一个枚举声明如下:
enum Testing
{
[Description("David Gouge")]
Dave = 1,
[Description("Peter Gouge")]
Pete = 2,
[Description("Marie Gouge")]
Ree = 3
}
Run Code Online (Sandbox Code Playgroud)
我希望能够通过提供字符串"Peter Gouge"来获得2.
作为起点,我可以遍历枚举字段并使用正确的属性获取字段:
string descriptionToMatch = "Peter Gouge";
FieldInfo[] fields = typeof(Testing).GetFields();
foreach (FieldInfo field in fields)
{
if (field.GetCustomAttributes(typeof(DescriptionAttribute), false).Count() > 0)
{
if (((DescriptionAttribute)field.GetCustomAttributes(typeof(DescriptionAttribute), false)[0]).Description == descriptionToMatch)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是那时候我仍然坚持在内心做什么.也不确定这是否是第一个出路.
我正在尝试学习TDD,但我很难理解我需要编写的一个小应用程序测试的内容/方法.
应用程序的(简化的)规范如下:
它需要从用户那里获取csv文件的位置,word文档mailmerge模板的位置和输出位置.
然后,应用程序将读取csv文件,对于每一行,将数据与单词模板合并并输出到指定的文件夹.
为了清楚起见,我不会问我将如何编写这样的应用程序,因为我确信如果我继续开始,我知道该怎么做.但是,如果我想使用TDD进行操作,那么我会猜测我不想测试读取真正的csv文件,或者测试执行合并的第三方组件或转换为pdf.
我认为只是一些一般的TDD指导将是一个很大的帮助!
我在Hub中没有触发OnConnected和OnDisconnected覆盖时遇到问题.
出于复制目的,我有一个非常简单的Hub:
public class OnlineHub : Hub
{
public void TestMethod()
{
var a = 1;
}
public override System.Threading.Tasks.Task OnConnected()
{
return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString());
}
public override System.Threading.Tasks.Task OnDisconnected()
{
return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
和一个aspx页面:
<script type="text/javascript">
$(function () {
$("#btn").click(function () {
$.connection.onlineHub.server.testMethod();
});
$.connection.onlineHub.server.connected = function (id, date) {
$("#results").append("connected: " + id + " : " + date + "</br>");
};
$.connection.onlineHub.server.disconnected = function (id, date) {
$("#results").append(("connected: " + id + " : " …
Run Code Online (Sandbox Code Playgroud) 我正在敲一个基于Nancy.Demo.Authentication.Forms的演示应用程序.
我执行Claims
和UserName
我的UserIdentity:IUserIdentity
班,并按照演示中,我有一个UserModel
带UserName
.
在SecureModule
课堂上,我可以看到Context.CurrentUser
可以用来查看登录的是谁,但根据界面,这只提供用户名和声明.如果我需要为视图模型获取更多数据(比如登录用户的消息),我可以看到用作db查询的过滤器的是用户名,感觉很好,很奇怪.我更愿意使用用户的uniqueIdentifier.
我认为我想要深究,如果最好将额外的字段添加到我的IUserIdentity
实现,或者UserModel
?在哪里填充这些?
不确定我的问题是否清楚(我脑子里还不清楚!),但是一些一般的基本架构建议会让人失望.
我正在使用Dapper执行存储过程,如下所示:
var sprocResult = conn.Query("TestSproc", new {clientID = 2}, commandType: CommandType.StoredProcedure).ToList();
Run Code Online (Sandbox Code Playgroud)
我可以枚举结果并列出值.我需要做的就是枚举从sproc返回的字段名称.我不会在设计时知道这些字段名称.
提前致谢.
我正在尝试创建一个松散耦合,高度可测试,具有良好干净代码等的小型演示Web应用程序.简而言之,我正在尝试以正确的方式做事.;)
我目前在Wolfie解决方案中有三个项目:
目前,Core对任何其他项目都一无所知.数据必须引用Core,因为Core具有Data将返回的类型.所以在这一点上,我发现自己意识到Web需要引用Core和Data才能工作,因为实体类型在Core中,数据库调用在Data中.
Data中的所有存储库类都具有接口,因此可以模拟存储库以进行测试.
我不认为我想将任何特定于数据库的代码或引用放入Core中,并且我希望将实体业务规则保留在Data之外.
从Web引用这两个项目是否正确?或者是否需要Web和其他项目之间的另一个项目,以便Web仅引用一个地方,然后不负责调用数据方法等.
我的目标是一个架构,我的核心应用程序独立于数据层和Web层.
我希望我已经有所了解,我期待一些有用的回复.
我有一个简单的NancyModule,它有一个Post声明:
Post["/Car/New"] = args =>
{
Car newCar = this.Bind<Car>();
newCar = _carRepos.CreateNewCar(newCar);
return Response.AsJson<Car>(newCar);
};
Run Code Online (Sandbox Code Playgroud)
从视图发布到这个工作正常:
<form action="/Car/New" method="post">
<input type="text" name="colour" />
<input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
当我尝试为此路由运行测试时,出现以下错误:
System.Exception : ConfigurableBootstrapper Exception
----> Nancy.RequestExecutionException : Oh noes!
----> System.MissingMethodException : Method not found: '!!0 Nancy.ModelBinding.ModuleExtensions.Bind(Nancy.INancyModule, System.String[])'.
Result StackTrace:
at Nancy.Testing.PassThroughStatusCodeHandler.Handle(HttpStatusCode statusCode, NancyContext context)
at Nancy.NancyEngine.CheckStatusCodeHandler(NancyContext context)
at Nancy.NancyEngine.HandleRequest(Request request, Func`2 preRequest)
at Nancy.NancyEngine.HandleRequest(Request request)
at Nancy.Testing.Browser.HandleRequest(String method, String path, Action`1 browserContext)
at Nancy.Testing.Browser.Post(String path, Action`1 browserContext)
at Shopr.Tests.Cars.CarTests.PostNewCarReturnsCar() …
Run Code Online (Sandbox Code Playgroud) 我从另一台SQL Server 2005计算机备份了一个数据库.我正在尝试将其还原到我的SQL Server 2008实例.
我已经为恢复创建了一个新数据库,但是在尝试使用以下内容进行恢复时(由ssms生成):
RESTORE DATABASE [WendyUAT]
FROM DISK = N'D:\wanda20130503.bak'
WITH FILE = 1,
MOVE N'Wendy' TO N'D:\databases\\WendyUAT.mdf',
MOVE N'Wendy_log' TO N'D:\databases\\WendyUAT.ldf',
MOVE N'sysft_WendyFti' TO N'D:\databases\\WendyUAT.WendyFti',
NOUNLOAD, REPLACE, STATS = 10
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
System.Data.SqlClient.SqlError:操作系统在'D:\ databases\WendyUAT上尝试'RestoreContainer :: ValidateTargetForCreation'时返回错误'32(进程无法访问该文件,因为它正由另一个进程使用.)密度纤维板".
据我所知(使用Process Explorer等),没有其他人使用该文件.我在windows defender中禁用了实时保护.我只是无法理解为什么SQL Server认为该文件正在使用中,因为Windows资源管理器允许我删除它没有任何问题,因此Windows似乎并不认为它正在使用中.
我们将非常感激地提供任何帮助.
host.json中的设置是单独应用于每个函数,还是作为一个整体应用于所有函数?
例如,我在同一个Project中有两个函数,它们都从Azure ServiceBus队列中获取消息.
如果我在host.json中将maxConcurrentCalls设置为10,这是否意味着整体上只会对ServiceBus进行10次并发调用,或者每个函数调用10 次,那么将会有20个并发调用?
提前致谢.
我有以下实体:
public class Module
{
public Module()
{
SubModules = new List<Module>();
}
public int Id { get; set; }
public string Title { get; set; }
public string Action { get; set; }
public string Controller { get; set; }
public string Icon { get; set; }
public List<Module> SubModules { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
其中,当通过Code First初始化时,生成下表Schema:
CREATE TABLE [dbo].[Modules](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](max) NULL,
[Action] [nvarchar](max) NULL,
[Controller] [nvarchar](max) NULL,
[Icon] [nvarchar](max) NULL,
[Module_Id] [int] …
Run Code Online (Sandbox Code Playgroud) c# ×4
asp.net ×2
nancy ×2
unit-testing ×2
.net ×1
architecture ×1
asp.net-mvc ×1
azure ×1
dapper ×1
mocking ×1
oop ×1
reflection ×1
signalr ×1
sql-server ×1
tdd ×1