小编Rub*_*ink的帖子

如何将Assembly.CodeBase转换为C#中的文件系统路径?

我有一个项目,将模板存储在\TemplatesDLL和EXE旁边的文件夹中.

我想在运行时确定这个文件路径,但使用的技术可以在单元测试和生产中使用(我不想在NUnit中禁用阴影复制!)

Assembly.Location 是不好的,因为它在NUnit下运行时返回阴影复制程序集的路径.

Environment.CommandLine 也是有限的用途,因为在NUnit等人它返回NUnit的路径,而不是我的项目.

Assembly.CodeBase 看起来很有希望,但它是一个UNC路径:

file:///D:/projects/MyApp/MyApp/bin/debug/MyApp.exe
Run Code Online (Sandbox Code Playgroud)

现在我可以使用字符串操作将其转换为本地文件系统路径,但我怀疑有一种更简洁的方法可以将它隐藏在.NET框架中.有人知道这样做的推荐方法吗?

(如果UNC路径不是file:///URL,则抛出异常在此上下文中绝对正常)

.net c# nunit codebase

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

表达式<Func <T,bool >>的Moq'ing方法作为参数传入

我对单元测试和嘲笑很新!我正在尝试编写一些单元测试,其中包含一些与数据存储交互的代码.数据访问由IRepository封装:

interface IRepository<T> {
    ....
    IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate);
    ....
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用具体的IoC实现的IRepository来测试的代码如下所示:

public class SignupLogic {
    private Repository<Company> repo = new Repository<Company>();

    public void AddNewCompany(Company toAdd) {
        Company existingCompany = this.repo.FindBy(c => c.Name == toAdd.Name).FirstOrDefault();

        if(existingCompany != null) {
            throw new ArgumentException("Company already exists");
        }

        repo.Add(Company);
        repo.Save();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,我正在测试SignupLogic.AddNewCompany()本身的逻辑,而不是逻辑和具体的存储库,我正在模拟IRepository并将其传递给SignupLogic.模拟的存储库看起来像这样:

Mock<Repository> repoMock = new Mock<Repository>();
repoMock.Setup(moq => moq.FindBy(c => c.Name == "Company Inc")....
Run Code Online (Sandbox Code Playgroud)

它返回一个内存中的IEnumberable,其中包含名称设置为"Company Inc"的Company对象.调用SignupLogic.AddNewCompany的单元测试会设置一个具有重复详细信息和trys的公司来传递它,并且我断言抛出了ArgumentException,并显示消息"公司已存在".这个测试没有通过.

在运行时通过单元测试和AddNewCompany()进行调试,似乎existingCompany始终为null.无奈之下,我发现如果我更新SignupLogic.AddNewCompany()以便对FindBy的调用如下所示:

Company existingCompany = this.repo.FindBy(c => c.Name == "Company Inc").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

测试通过,这告诉我,Moq只响应与我在测试夹具中设置的代码完全相同的代码.显然,在测试任何重复的公司被SignupLogic.AddNewCompany拒绝时,这并不是特别有用.

我已经尝试设置moq.FindBy(...)来使用"Is.ItAny",但这并不会导致测试通过.

从我正在阅读的所有内容来看,似乎我正在尝试测试表达式实际上并不能在这里使用Moq.可能吗?请帮忙!

c# unit-testing moq

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

Team Foundation Build或TeamCity?

我们是一家从事.NET LOB开发工作的MS商店.我们还为我们的CRM应用程序使用MS Dynamics ...所有开发人员目前都在使用VS/SQL Server 2008.我们也使用VSS,但是每个人都讨厌它在工作中并且很快就会出局.

我们正在开始整个团队的TDD实施计划(〜十几个人).我已经获得TeamCity设置并使用2008 sln构建器成功运行我的第一个自动构建,并使用同事已设置的SVN进行源代码控制分析.在演示管理时,我认为他们开始购买我的蛇油,并提出了调查TFS的建议.

这让我对TDD架构的计划产生了不小的影响.尽管如此,因为我一直认为TFS太昂贵而且对我们的团队来说不值得(而且我在其他商店也看到了相同的情况).我觉得MS在TDD/CI领域已落后多年,第三方产品可能更好,更成熟......我还需要做很多研究,但我想我会来这里看看如果有人实际使用过两个系统.

我意识到TFS包含的内容远远多于构建服务器......但我不想至少故意将这个问题过于宽泛.使用TFS/TFB代替TeamCity的实际利弊是什么 - 例如,我们会失去/获得哪些好处?有没有人在这里实际使用过这两个系统(TFS for TDD/CI和TeamCity/SVN)并且可以从实际的角度说话?

我已经对这个主题做了一些搜索,我在SO上找到的一篇帖子提到TFB的缺点是它只支持MSBuild.我打算在TeamCity上使用FinalBuilder; 看来它也支持TFS ......

谢谢你的建议

编辑:有没有人使用TFS作为他们的Build/CI服务器,可以告诉成功/失败的故事?

tdd teamcity tfs continuous-integration tfsbuild

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

ADO.NET DbContext Generator与ADO.NET Poco实体生成器(ObjectContext)

我即将开始实现一个项目的数据访问基础设施,该项目采用DDD方法构建(这是我第一次尝试DDD,所以要温和;-)).

我将使用Entity Framework.到目前为止,我正在研究朱莉·勒曼(Julie Lerman)在她的伟大着作" 编程实体框架 "(Programming Entity Framework)中使用的方法,其中使用了ADO.NET POCO实体生成器,对T4模板和一些更多自定义代码进行了一些更改.
今天我开始使用Database First方法阅读有关EF4.1和ADO.NET DbContext Generator的文章,我正在尝试决定应该选择哪一个.

DbContext和EF4.1的DDD方法似乎比POCO实体更好,更清晰,但我担心它会在不久的将来导致一些问题,因为EF4.1仍然在RC中.

ADO.NET团队博客,我知道EF4.1 包括:

  • 枚举支持
  • 空间数据类型支持
  • Code First中的存储过程支持
  • Code First中的迁移支持
  • Code First中的可定制约定

根据我的理解,由于我将使用Database First,因此未包含的功能数量较少.

总之,我的问题是:
我可以用EF4.1 DbContext Generator 替换POCO实体生成器吗?

entity-framework entity-framework-4 entity-framework-4.1

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

在给定相对路径时,如何让MSBUILD评估并打印完整路径?

如何在<Message />给定相对路径的情况下让MSBuild在任务中评估和打印绝对路径?

物业集团

<Source_Dir>..\..\..\Public\Server\</Source_Dir>
<Program_Dir>c:\Program Files (x86)\Program\</Program_Dir>
Run Code Online (Sandbox Code Playgroud)

任务

<Message Importance="low" Text="Copying '$(Source_Dir.FullPath)' to '$(Program_Dir)'" />
Run Code Online (Sandbox Code Playgroud)

产量

将''复制到'c:\ Program Files(x86)\ Program \'

msbuild relative-path absolute-path

55
推荐指数
4
解决办法
3万
查看次数

String.Format一个整数,使用千位分隔符,不带小数位或前导0代表小整数

愚蠢的问题,我想格式化一个整数,以便它出现在1000的分隔符(,),但也没有小数位,没有前导0.

到目前为止,我的尝试是:

String.Format("{0} {1}", 5, 5000);            // 5 5000
String.Format("{0:n} {1:n}", 5, 5000);        // 5.00 5,000.00
String.Format("{0:0,0} {1:0,0}", 5, 5000);    // 05 5,000
Run Code Online (Sandbox Code Playgroud)

我之后的输出是:

5 5,000
Run Code Online (Sandbox Code Playgroud)

有什么明显的东西让我失踪吗?

c# string-formatting

53
推荐指数
3
解决办法
6万
查看次数

找不到sn.exe来签署程序集

我看了看C:\Program Files\Microsoft.NET,我看不到任何SN.exe文件.

我安装了.NET 3.5运行时; 还不够吗?

c# msbuild sn.exe

49
推荐指数
4
解决办法
7万
查看次数

单元测试和检查私有变量值

我正在用C#,NUnit和Rhino Mocks编写单元测试.以下是我正在测试的类的相关部分:

public class ClassToBeTested
{
    private IList<object> insertItems = new List<object>();

    public bool OnSave(object entity, object id)
    {
        var auditable = entity as IAuditable;
        if (auditable != null) insertItems.Add(entity);

        return false;            
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在调用OnSave后测试insertItems中的值:

[Test]
public void OnSave_Adds_Object_To_InsertItems_Array()
{
     Setup();

     myClassToBeTested.OnSave(auditableObject, null);

     // Check auditableObject has been added to insertItems array            
}
Run Code Online (Sandbox Code Playgroud)

这是什么最好的做法?我曾考虑将insertItems作为一个带有公共get的Property添加,或者将List注入ClassToBeTested,但不确定我是否应该修改代码以进行测试.

我已经阅读了许多关于测试私有方法和重构的帖子,但这是一个非常简单的类,我想知道什么是最好的选择.

c# nunit unit-testing

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

TFS构建服务器 - CSC:致命错误CS2008:未指定输入

当我们构建解决方案或错误引用的特定项目时,我们在构建服务器上收到上述错误消息.

我们可以使用visual studio(也在构建服务器上)构建解决方案而没有任何问题,但是在运行msbuild时它会因上述错误而失败.

有任何想法吗?

msbuild tfs team-build .net-3.5

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

EventStore与MongoDb

我想知道使用EventStore有什么好处(http://geteventstore.com)比在MongoDb中自己实现事件采购.

我问的原因是,我们公司有很多人每天与MongoDb合作.但它们不适用于Event Sourcing.虽然他们并没有完全关注这个主题,但他们也不打算在任何地方开始实施.

我即将开始一个非常适合Event Sourcing的项目.大约有16个定义明确的事件,大约有7个定义明确的预测.我说"关于"因为我知道一旦他们看到产品在使用中就会有更多的预测和事件需求.

这种方法将首先是API,我们组织的其他部分将使用REST Api.

虽然我已经按照Greg Young定义的方式阅读了很多关于事件采购的内容,但我从未实际实施过Event Sourcing解决方案.

这是一个绿色的田野项目.没有技术限制,因为我们将把所有内容公开为REST接口.因此,如果有人有使用MongoDb的EvenStore或Event Sourcing的工作经验,请赐教.

关于事件采购的几乎完全不相关的问题:您是否曾直接查询事件存储?或者您是否总是创建新的预测和重播事件以填充这些预测?

mongodb event-sourcing get-event-store

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