小编Dav*_*uge的帖子

使用EF4"Code First"和存储库进行单元测试

我试图处理单元测试一个非常简单的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)

c# asp.net-mvc unit-testing mocking entity-framework-4

49
推荐指数
2
解决办法
1万
查看次数

通过其描述属性查找枚举值

这可能看起来有点颠倒,但我想要做的是通过其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)

但是那时候我仍然坚持在内心做什么.也不确定这是否是第一个出路.

c# reflection

27
推荐指数
2
解决办法
2万
查看次数

通过一个简单的例子学习TDD

我正在尝试学习TDD,但我很难理解我需要编写的一个小应用程序测试的内容/方法.

应用程序的(简化的)规范如下:

它需要从用户那里获取csv文件的位置,word文档mailmerge模板的位置和输出位置.

然后,应用程序将读取csv文件,对于每一行,将数据与单词模板合并并输出到指定的文件夹.

为了清楚起见,我不会问我将如何编写这样的应用程序,因为我确信如果我继续开始,我知道该怎么做.但是,如果我想使用TDD进行操作,那么我会猜测我不想测试读取真正的csv文件,或者测试执行合并的第三方组件或转换为pdf.

我认为只是一些一般的TDD指导将是一个很大的帮助!

c# tdd

23
推荐指数
2
解决办法
2万
查看次数

SignalR OnConnected和OnDisconnected未触发

我在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)

asp.net signalr

8
推荐指数
2
解决办法
1万
查看次数

南希的用户信息

我正在敲一个基于Nancy.Demo.Authentication.Forms的演示应用程序.

我执行ClaimsUserName我的UserIdentity:IUserIdentity班,并按照演示中,我有一个UserModelUserName.

SecureModule课堂上,我可以看到Context.CurrentUser可以用来查看登录的是谁,但根据界面,这只提供用户名和声明.如果我需要为视图模型获取更多数据(比如登录用户的消息),我可以看到用作db查询的过滤器的是用户名,感觉很好,很奇怪.我更愿意使用用户的uniqueIdentifier.

我认为我想要深究,如果最好将额外的字段添加到我的IUserIdentity实现,或者UserModel?在哪里填充这些?

不确定我的问题是否清楚(我脑子里还不清楚!),但是一些一般的基本架构建议会让人失望.

nancy

6
推荐指数
1
解决办法
2615
查看次数

使用Dapper从存储过程中获取字段名称

我正在使用Dapper执行存储过程,如下所示:

var sprocResult = conn.Query("TestSproc", new {clientID = 2}, commandType: CommandType.StoredProcedure).ToList();
Run Code Online (Sandbox Code Playgroud)

我可以枚举结果并列出值.我需要做的就是枚举从sproc返回的字段名称.我不会在设计时知道这些字段名称.

提前致谢.

.net dapper

6
推荐指数
1
解决办法
1824
查看次数

简单的应用架构建议

我正在尝试创建一个松散耦合,高度可测试,具有良好干净代码等的小型演示Web应用程序.简而言之,我正在尝试以正确的方式做事.;)

我目前在Wolfie解决方案中有三个项目:

  • Wolfie.Core - 包含业务实体
  • Wolfie.Data - 包含数据访问代码,引用Core.
  • Wolfie.Web - 将成为一个南希网站.

目前,Core对任何其他项目都一无所知.数据必须引用Core,因为Core具有Data将返回的类型.所以在这一点上,我发现自己意识到Web需要引用Core和Data才能工作,因为实体类型在Core中,数据库调用在Data中.

Data中的所有存储库类都具有接口,因此可以模拟存储库以进行测试.

我不认为我想将任何特定于数据库的代码或引用放入Core中,并且我希望将实体业务规则保留在Data之外.

从Web引用这两个项目是否正确?或者是否需要Web和其他项目之间的另一个项目,以便Web仅引用一个地方,然后不负责调用数据方法等.

我的目标是一个架构,我的核心应用程序独立于数据层和Web层.

我希望我已经有所了解,我期待一些有用的回复.

c# architecture asp.net oop

5
推荐指数
2
解决办法
629
查看次数

使用Nancy.Testing.Browser发布时出现ConfigurableBootstrapper错误

我有一个简单的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)

unit-testing nancy

3
推荐指数
1
解决办法
2283
查看次数

恢复数据库 - 无法访问文件,因为它正被另一个进程使用

我从另一台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似乎并不认为它正在使用中.

我们将非常感激地提供任何帮助.

sql-server

3
推荐指数
1
解决办法
2万
查看次数

Azure函数host.json每个函数或全局设置?

host.json中的设置是单独应用于每个函数,还是作为一个整体应用于所有函数?

例如,我在同一个Project中有两个函数,它们都从Azure ServiceBus队列中获取消息.

如果我在host.json中将maxConcurrentCalls设置为10,这是否意味着整体上只会对ServiceBus进行10次并发调用,或者每个函数调用10 ,那么将会有20个并发调用?

提前致谢.

azure azure-functions

3
推荐指数
1
解决办法
1106
查看次数

实体框架代码第一树模型

我有以下实体:

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)

ef-code-first entity-framework-5

2
推荐指数
1
解决办法
4481
查看次数