- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 StoryQ discussion boards 上发布了这个问题,但通过查看对其他问题的(缺乏)回答,那里的事件充其量似乎很少。我想我应该让这里的每个人都试一试。
有没有办法修改或配置输出(输出窗口和文件)以包含自定义字符串?例如,我的一个故事要求抛出一个特定的异常。为此,我捕获异常并保存它,然后在一个单独的方法中测试它是否为非空且属于所需类型。我希望能够将异常类型附加到输出(很像参数附加到方法调用)。
例如
.Then(ExceptionIsThrown<ArgumentNullException>)
将导致以下输出
then exception is thrown (ArgumentNullException)
最佳答案
感谢Giorgio Minardi指导我研究 StoryQ.Formatting 命名空间。在那里我发现我可以使用一个简单的属性来覆盖方法格式化。
该 API 提供了一个 OverrideMethodFormatAttribute
(从抽象类 MethodFormatAttribute
继承而来),如果您想使用特定的字符串常量,它可以工作,但 C# 不喜欢属性中方法的类型参数。由于属性中的 T
而无法编译:
[OverrideMethodFormat(string.Format("exception is thrown ({0})", typeof(T).Name))]
private void ExceptionIsThrown<T>() where T : Exception
{
...
}
解决方案是创建另一个 MethodFormatAttribute
子类,专门搜索泛型类型的方法并输出它们。这个子类如下:
public class GenericMethodFormatAttribute : MethodFormatAttribute
{
private readonly string _textFormat;
public GenericMethodFormatAttribute()
{
_textFormat = null;
}
public GenericMethodFormatAttribute(string textFormat)
{
_textFormat = textFormat;
}
public override string Format(MethodInfo method,
IEnumerable<string> parameters)
{
var generics = method.GetGenericArguments();
if (_textFormat == null)
{
var genericsList = string.Join<Type>(", ", generics);
return string.Format("{0} ({1})",
UnCamel(method.Name),
genericsList);
}
return string.Format(_textFormat, generics);
}
}
用法几乎类似于提供的属性,只是您可以选择提供格式字符串而不是字符串常量。省略格式字符串 un-camel-cases 方法名称就像默认行为一样。
[GenericMethodFormatAttribute]
private void ExceptionIsThrown<T>() where T : Exception
{
...
}
这让我可以在我的源代码中声明属性,而不必触及 StoryQ 代码。十点 StoryQ 的可扩展性!
关于c# - 使用 StoryQ 修改或配置输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15226666/
我们如何使用 StoryQ 来测试预期出现异常的场景? 最佳答案 就实际代码而言,在测试代码的 .Then 部分,您需要创建一个 Action 或 Func 来确定正在测试的内容,然后在代码的 .Th
我在 StoryQ discussion boards 上发布了这个问题,但通过查看对其他问题的(缺乏)回答,那里的事件充其量似乎很少。我想我应该让这里的每个人都试一试。 有没有办法修改或配置输出(输
我想使用 storyQ 将此单元测试转换为 BDD工作单元测试 [Test] public async void CreateNewProjectAndDatabase(
有没有人有在 BDD 中使用现成框架作为规范流与 CQRS 的经验。 我喜欢 Mark Nijhof 的方法,但是我已经将 SpecFlow 用于其他项目。任何人都可以提供一些启示,如果可能的话,举个
我是一名优秀的程序员,十分优秀!