小编Eug*_*iró的帖子

如何使用moq模拟Controller.User

我有几个ActionMethods来查询Controller.User这样的角色

bool isAdmin = User.IsInRole("admin");
Run Code Online (Sandbox Code Playgroud)

在这种情况下方便地行事.

我开始用这样的代码对这些方法进行测试

[TestMethod]
public void HomeController_Index_Should_Return_Non_Null_ViewPage()
{
    HomeController controller  = new HomePostController();
    ActionResult index = controller.Index();

    Assert.IsNotNull(index);
}
Run Code Online (Sandbox Code Playgroud)

并且测试失败,因为未设置Controller.User.任何的想法?

c# asp.net-mvc unit-testing moq mocking

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

我如何moq aingleingleResult?我是不是该?还是有更好的方法?

我的控制器中有一个这样的动作方法

public ActionResult Index()
{
    using (NorthwindDataContext db = new NorthwindDatacontext())
    {
        var results = db.GetRecordSets(arg1, ....).ToList();
        // use results as list
    }

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

我想开始为它做测试(是的,在它构建之后,而不是之前......但代码是在我开始使用TDD之前编写的......)

我发现在控制器中添加这样的属性

public delegate NorthwindDatacontext ContextBuilderDelegate();

public ContextBuilderDelegate ContextBuilder { get; set; }
Run Code Online (Sandbox Code Playgroud)

我可以在构造函数中添加这样的东西......

ContextBuilder = () => new NorthwindDatacontext();
Run Code Online (Sandbox Code Playgroud)

然后我可以测试ActionMethod设置ContextBuilder属性与模拟NorthwindDatacontext

var controller              = new MyController();
var mockDataContext         = new Mock<NorthwindDatacontext>();
controller.ContextBuilder   = () => mockDataContext.Object;
Run Code Online (Sandbox Code Playgroud)

但是......我发现无法使用它,因为NorthwindDatacontext的所有方法都使用ISingleResult作为returnType,我无法找到使用该接口创建对象的方法.我试过这个

var theResult                  = new List<GetRecordSetsResult>();
// fill the data structure here with the provided result...

mockDataContext.Setup(c => …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc moq

6
推荐指数
2
解决办法
2429
查看次数

WPF:有没有办法在XAML中有条件地更改属性值或需要后面的代码(VB/C#)?

我开始了一个新的小WPF应用程序,它有一个类似于放在图片上的条目形式.该图片具有应该输入的数据的占位符以及放置TextBox的位置,因此用户实际上将数据输入到表格中,就像她手工或打字机一样.我想添加一个效果,当用户离开字段时,partiali隐藏文本框,因此在其中一个字段中放置了一些事件处理程序,添加了以下代码:

<TextBox Height="23" VerticalAlignment="Top" Width="237" 
         HorizontalAlignment="Left" Margin="641,25,0,0" 
         Name="txtAmount" LostFocus="txtAmount_LostFocus" />

private void txtAmount_LostFocus(object sender, RoutedEventArgs e)
{
    Opacity = .5;
}
Run Code Online (Sandbox Code Playgroud)

这有效,所以我继续添加代码在所有textBoxes中设置相同的行为,所以我用下面的代码更改了上面的代码:

<Window.Resources>
    <Storyboard x:Key="FadeOut">
        <DoubleAnimation From="1.0" To="0.5" 
                         Duration="0:0:0.2"
                         Storyboard.TargetProperty="Opacity">

        </DoubleAnimation>
    </Storyboard>
    <Storyboard x:Key="FadeIn">
        <DoubleAnimation From="0.5" To="1.0" 
                         Duration="0:0:0.2"
                         Storyboard.TargetProperty="Opacity"/>
    </Storyboard>
    <Style x:Key="InTheShadow" >
        <Style.Setters>
            <Setter Property="TextBox.Opacity" Value="0.5" />
        </Style.Setters>
        </Style.Setters>
        <Style.Triggers>
            <EventTrigger RoutedEvent="TextBox.GotFocus">
                <BeginStoryboard Storyboard="{StaticResource FadeIn}"/>
            </EventTrigger>
            <EventTrigger RoutedEvent="TextBox.LostFocus">
                <BeginStoryboard Storyboard="{StaticResource FadeOut}"/>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

第一个代码,也处理了GotFocus事件,但它的代码几乎相同,所以第二个代码实现了,并且放在所有设置样式的textBox上.

现在,这也有效,但我想为MouseEnter/MouseLeave添加相同的效果

            <EventTrigger RoutedEvent="TextBox.MouseEnter">
                <BeginStoryboard Storyboard="{StaticResource FadeIn}"/>
            </EventTrigger>
            <EventTrigger RoutedEvent="TextBox.MouseLeave">
                <BeginStoryboard Storyboard="{StaticResource FadeOut}"/>
            </EventTrigger> …
Run Code Online (Sandbox Code Playgroud)

wpf events

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

php header函数在不应该生成错误

我正在使用PHP 4.3.11,当我执行一个标题总是响应这样的错误

警告:无法修改标题信息 - 已在第2行的d:\ folder\file.php中发送的标题(输出从d:\ folder\file.php:1开始)

警告:无法修改标题信息 - 已在第3行的d:\ folder\file.php中发送的标题(输出从d:\ folder\file.php:1开始) 当前PHP版本:4.3.11

我用来生成此错误的代码是

<?php
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");   // Date in the past

    echo 'Current PHP version: ' . phpversion();

    // prints e.g. '2.0' or nothing if the extension isn't enabled
    echo phpversion('tidy');
?>
Run Code Online (Sandbox Code Playgroud)

它在php标签之前或之后没有空格或换行符,并且5.x版本中的相同代码只返回预期的php版本.

任何线索?

提前致谢

编辑: 解决了!:我用西欧编码打开了文件并删除了BOM并且工作正常.感谢你的帮助!

php header

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

标签 统计

asp.net-mvc ×2

moq ×2

c# ×1

events ×1

header ×1

mocking ×1

php ×1

unit-testing ×1

wpf ×1