小编Fin*_*las的帖子

C#中的枚举应该有自己的文件吗?

我有一个使用枚举的类,枚举当前在它自己的文件中,这看起来很浪费.

将枚举放在文件命名空间中的一般意见是什么?或者枚举真的应该存在于自己的cs文件中吗?

编辑

我应该提一下,虽然有问题的类使用这些枚举,但外部调用者也是如此.换句话说,另一个类可以设置这些枚举.因此,他们不会在课堂内部使用,否则这个问题将毫无疑问.

c# enums coding-style

172
推荐指数
13
解决办法
6万
查看次数

为什么你不能抓住代码合同例外?

在我的测试项目中无法访问System.Diagnostics.Contracts.ContractException.请注意,这段代码纯粹是我自己搞乱了我的Visual Studio新副本,但我想知道我做错了什么.

我正在使用VS的专业版,因此​​我没有静态检查.为了仍然使用代码契约(我喜欢),我认为我的方法可以工作的唯一方法是捕获在运行时抛出的异常,但我发现这不可能.

测试方法

[TestMethod, ExpectedException(typeof(System.Diagnostics.Contracts.ContractException))]
public void returning_a_value_less_than_one_throws_exception()
{
    var person = new Person();
    person.Number();
}
Run Code Online (Sandbox Code Playgroud)

方法

public int Number()
{
    Contract.Ensures(Contract.Result<int>() >= 0);
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

错误

Error 1 'System.Diagnostics.Contracts.ContractException' is inaccessible
due to its protection level.

编辑

经过一番思考后,我得出了评论中讨论的结论,以及以下内容.给定一种方法,如果这有一个可以用代码合同形式表达的要求,我会写这样的测试.

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void value_input_must_be_greater_than_zero()
{
    // Arrange
    var person = new Person();
    // Act
    person.Number(-1);
}
Run Code Online (Sandbox Code Playgroud)

这将确保合同是代码的一部分,并且不会被删除.这将要求Code Contract实际抛出指定的异常.但在某些情况下,不需要这样做.

c# .net-4.0 visual-studio-2010 code-contracts

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

使用客户端Javascript时如何保持API密钥的秘密?

例如,看看这个Facebook插件.

在客户端,API密钥清晰可见.是什么阻止其他用户获取此密钥并在其他网站上使用此功能?

我认为一个非常天真的实现将是检查请求来自的域,但这样的事情很容易伪造.

如果我要创建类似的东西,我将如何保护身份验证过程?

我希望尽可能多地使用某种形式的服务器身份验证来完成这项工作.任何链接或建议将不胜感激.

更新

关于我发现有用的API密钥的类似问题.

javascript authentication client-side

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

如何让XML注释出现在另一个项目(dll)中?

/// <summary>
/// This method does something...
/// </summary>
public void DoSomething() 
{
    // code...
}
Run Code Online (Sandbox Code Playgroud)

当使用该方法/类等...在不同的.dll中时,注释不会显示.

.net c# xml-documentation

40
推荐指数
1
解决办法
9677
查看次数

.NET 4.0代码契约 - 它们将如何影响单元测试?

例如,本文介绍了它们.

有什么好处?

静态分析似乎很酷,但同时它会阻止在单元测试中传递null作为参数的能力.(如果您按照文章中的示例进行操作)

关于单元测试的主题 - 如果您已经实施自动化测试,那么现在肯定没有任何关系可以代码合同吗?

更新

玩过代码合约后,我有点失望.例如,根据接受的答案中的代码:

public double CalculateTotal(Order order)
{
    Contract.Requires(order != null);
    Contract.Ensures(Contract.Result<double>() >= 0);
    return 2.0;
}
Run Code Online (Sandbox Code Playgroud)

对于单元测试,您仍然必须编写测试以确保无法传递null,并且如果契约是业务逻辑,则结果大于或等于零.换句话说,如果我要删除第一个合同,除非我特意测试了这个功能,否则没有测试会中断.这是基于不使用内置于Visual Studio的更好(终极等)版本中的静态分析.

从本质上讲,它们都归结为编写传统if语句的另一种方式.我实际使用TDD的经验,代码合同显示了原因,以及我如何去做.

unit-testing .net-4.0 code-contracts microsoft-contracts

37
推荐指数
2
解决办法
3992
查看次数

如何使用Moq测试方法调用顺序

目前我有:

    [Test]
    public void DrawDrawsAllScreensInTheReverseOrderOfTheStack() {
        // Arrange.
        var screenMockOne = new Mock<IScreen>();
        var screenMockTwo = new Mock<IScreen>();
        var screens = new List<IScreen>();
        screens.Add(screenMockOne.Object);
        screens.Add(screenMockTwo.Object);
        var stackOfScreensMock = new Mock<IScreenStack>();
        stackOfScreensMock.Setup(s => s.ToArray()).Returns(screens.ToArray());
        var screenManager = new ScreenManager(stackOfScreensMock.Object);
        // Act.
        screenManager.Draw(new Mock<GameTime>().Object);
        // Assert.
        screenMockOne.Verify(smo => smo.Draw(It.IsAny<GameTime>()), Times.Once(),
            "Draw was not called on screen mock one");
        screenMockTwo.Verify(smo => smo.Draw(It.IsAny<GameTime>()), Times.Once(), 
            "Draw was not called on screen mock two");
    }
Run Code Online (Sandbox Code Playgroud)

但是我在生产代码中绘制对象的顺序并不重要.我可以先做一个,或者两个没关系.然而,它应该重要,因为绘制顺序很重要.

你如何(使用Moq)确保按特定顺序调用方法?

编辑

我摆脱了那个考验.draw方法已从我的单元测试中删除.我只需要手动测试它的工作原理.尽管顺序的逆转被带入了一个单独的测试类,在那里测试它并不是一件坏事.

感谢您关注的功能链接.我当然希望它能很快得到补充,非常方便.

c# unit-testing moq

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

如何避免吸气剂和二传手

我在很多地方都读过"吸气鬼和恶魔都是邪恶的".我理解为什么这样.但我不知道如何完全避免它们.Say Item是一个包含项目名称,数量,价格等信息的类......而ItemList是一个类,它有一个Items列表.要找到总计:

int grandTotal()
{
int total = 0;

for (Item item: itemList)
       total += item.getPrice();

return total;
}

在上面的例子中,如何避免getPrice()?Item类提供了getName,setName等....

我该如何避免它们?

oop ooad design-patterns properties accessor

25
推荐指数
5
解决办法
1万
查看次数

如何向文档添加XElement,避免"结构不正确的文档"错误?

        // Remove element with ID of 1
        var userIds = from user in document.Descendants("Id")
                       where user.Value == "1"
                       select user;

        userIds.Remove();

        SaveAndDisplay(document);

        // Add element back
        var newElement = new XElement("Id", "0", 
            new XElement("Balance", "3000"));
        document.Add(newElement);

        SaveAndDisplay(document);
Run Code Online (Sandbox Code Playgroud)

add元素后块是个问题.当它到达添加时它表明:

此操作将创建结构不正确的文档.

我犯的是什么愚蠢的错误?

编辑:

是的,我是在读XDocument,而不是XElement.关于何时支持其中一个的任何建议?

.net c# xml linq-to-xml

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

我们是否有效地使用IoC?

所以我的公司使用Castle Windsor IoC容器,但感觉"关闭":

  • 所有数据类型都在代码中注册,而不是在配置文件中注册.
  • 所有数据类型都是硬编码的,以使用一个接口实现.事实上,对于几乎所有给定的接口,只有一个实现.
  • 所有已注册的数据类型都具有默认构造函数,因此Windsor不会为任何已注册的类型实例化对象图.

设计系统的人坚持认为IoC容器使系统更好.我们有1200多个公共类,所以它是一个很大的系统,你期望找到像Windsor这样的框架.但我仍然持怀疑态度.

我的公司是否有效地使用IoC?使用Windsor的新对象比使用new关键字的新对象更有优势吗?

design-patterns castle-windsor ioc-container

17
推荐指数
1
解决办法
919
查看次数

单元测试:记录和依赖注入

所以关于来自SO和其他互联网站点的日志记录,最佳响应似乎是:

void DoSomething() {
    Logger.Log("Doing something!");
    // Code...
}
Run Code Online (Sandbox Code Playgroud)

现在通常你会避免静态方法,但在记录(特殊情况)的情况下,这是最简单和最干净的路线.在静态类中,您可以通过配置文件/框架轻松注入实例,以获得与DI相同的效果.

我的问题来自单元测试的角度.

在上面的示例代码中,想象DoSomething()的意思是将两个数字加在一起.我会为这个罚款写单元测试.伐木怎么样?

我是否会为日志记录编写单元测试(但是对于记录器本身使用模拟实例)?我知道如果是这种情况我将不得不编写一个集成测试来证明记录器实际写入日志文件,但我不确定.

在测试驱动开发之后(我这样做)我需要进行单元测试才能决定接口没有?

有什么建议?

language-agnostic tdd logging unit-testing

15
推荐指数
3
解决办法
8690
查看次数