小编hol*_*ard的帖子

单元测试中断言的最佳实践

我正在尝试测试一个以三个参数作为输入的应用程序(A面,B面,C面)并计算三角形isoscele(两边相等),scalene(两边都不相等)或等边(所有双方是平等的).

下面是我正在进行的单元测试的一些代码.在这种情况下,我正在测试应用程序告诉用户三角形是等速的,我的问题是在这种情况下Assert之后应该有什么?AreNotSame适用于scalene,AreSame适用于等边,但这里有什么用?提前致谢.

    public void isIsoscelesTest()
    {
        Triangle target = new Triangle(5.0, 5.0, 2.0); // TODO: Initialize to an appropriate value
        bool expected = true; // TODO: Initialize to an appropriate value
        bool actual;
        actual = target.isIsosceles();
        Assert.AreNotSame(expected, actual);
    }
Run Code Online (Sandbox Code Playgroud)

//来自应用程序......

    public bool isIsosceles() {
      if(uniqueSides()==2)
        return true;
      return false;
    }
Run Code Online (Sandbox Code Playgroud)

c# unit-testing visual-studio-2010

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

检查单元测试中是否抛出参数

我正在为一个应用程序进行单元测试,该应用程序有一个构造函数,它将三个值作为参数.数字应为0或更高,现在我正在编写一个单元测试,用于抛出异常的构造函数,如果不是这样的话.

我无法弄清楚的是我如何在"断言"之后写什么来确定这一点,以便在非法数字传递给构造函数时测试通过.提前致谢.

编辑:我正在使用MSTest框架

   public void uniqueSidesTest2()
    {
        try {
            Triangle_Accessor target = new Triangle_Accessor(0, 10, 10);
        }
        catch (){
            Assert // true (pass the test)
            return;
        }

        Assert. // false (test fails)
    }
Run Code Online (Sandbox Code Playgroud)

//从代码中......

    public Triangle(double a, double b, double c) {
        if ((a <= 0) || (b <= 0) || (c <= 0)){
            throw new ArgumentException("The numbers must higher than 0.");
        }
        sides = new double[] { a, b, c };
    }
Run Code Online (Sandbox Code Playgroud)

c# unit-testing try-catch

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

构造函数的单元测试

我正在实验室进行单元测试,下面是我正在测试的应用程序中的一段代码。大多数单元测试都已完成,但关于下面的构造函数,我只是不知道如何测试它。例如,构造函数到底对数组元素做了什么?测试构造函数的好方法是什么?

是否有一个善良的灵魂可以给我一个正确的方向踢?

  public struct Point { 
    public int x, y;

    public Point(int a, int b) {
      x = a;
      y = b;
    }
  }
Run Code Online (Sandbox Code Playgroud)

...

  public Triangle(Point[] s) {
    sides = new double[s.Length];
    sides[0] = Math.Sqrt(Math.Pow((double)(s[1].x - s[0].x), 2.0) + Math.Pow((double)(s[1].y - s[0].y), 2.0));
    sides[1] = Math.Sqrt(Math.Pow((double)(s[1].x - s[2].x), 2.0) + Math.Pow((double)(s[1].x - s[2].x), 2.0));
    sides[2] = Math.Sqrt(Math.Pow((double)(s[2].x - s[0].x), 2.0) + Math.Pow((double)(s[2].x - s[0].x), 2.0));
  }
Run Code Online (Sandbox Code Playgroud)

...

        [TestMethod()]
        public void TriangleConstructorTest1()
        {
            Point[] s = null; // TODO: Initialize …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing mstest

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

指定的参数太多

我正在开发一个应用程序,它允许人们列出电影以及编辑,插入和删除它们.在db我有三个表(Movie,Genre和MovieGenre),这个问题与向电影添加一个类型有关(通过添加到MovieGenre表,它保存了电影类型的轨迹).

下面是相关代码,以及抛出的异常.我只是无法弄清楚为什么我收到此错误消息,因为我使用正确数量的参数,因为我可以在调用sproc时在c#代码中看到它.

有人能看出这里的问题是什么吗?

例外: 过程或函数usp_InsertMovieGenre指定了太多参数.

异常详细信息: System.Data.SqlClient.SqlException:过程或函数usp_InsertMovieGenre指定了太多参数.

c#代码:

public void InsertMovieGenre(MovieGenre movieGenre) {

    using (SqlConnection conn = CreateConnection()) {
        try {
            SqlCommand cmd = new SqlCommand("dbo.usp_InsertMovieGenre", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@MovieID", SqlDbType.Int, 4).Value = movieGenre.MovieID;
            cmd.Parameters.Add("@GenreID", SqlDbType.Int, 4).Value = movieGenre.MovieGenreID;

            cmd.Parameters.Add("@MovieGenreID", SqlDbType.Int, 4).Direction = ParameterDirection.Output;

            conn.Open();

            cmd.ExecuteNonQuery();

            movieGenre.MovieID = (int)cmd.Parameters["@MovieGenreID"].Value;
        }
        catch {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

存储过程:

ALTER PROCEDURE usp_InsertMovieGenre
@GenreID varchar(500),
@MovieID int
AS
BEGIN
    INSERT INTO MovieGenre (GenreID, MovieID)
    VALUES (@GenreID, @MovieID);
END
GO
Run Code Online (Sandbox Code Playgroud)

c# sql asp.net stored-procedures

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

在没有layout.jade文件的情况下显示部分

我正在使用layout.jade作为所有部分的模板.layout.jade包括页眉,页脚,侧边栏等,部分是正文中显示的内容.

现在我已经用iframe实现了一个灯箱,以显示其中一个部分.问题是我不希望页眉,页脚等显示在灯箱内,只是部分玉文件.

在这种情况下有没有办法排除layout.jade?

提前致谢!

layout node.js express pug

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

每次单击都会将新元素添加到关联数组

这可能很简单,但我现在不知道如何解决。每次单击提交按钮时,下面的函数都会检查输入字段 1(名称),如果不为空,则将该值添加到关联数组中,并继续进行描述。

我想要的是每次单击都向数组添加一个新的 1 级元素,该元素应该保存这些值,以便在三次单击后它看起来像这样:

Click 1:
    listObject[0]['listObjectName'] = 'Name 1';
    listObject[0]['listObjectDesc'] = 'Desc 1';

Click 2:
    listObject[1]['listObjectName'] = 'Name 2';
    listObject[1]['listObjectDesc'] = 'Desc 2';

Click 3:
    listObject[2]['listObjectName'] = 'Name 3';
    listObject[2]['listObjectDesc'] = 'Desc 3';
Run Code Online (Sandbox Code Playgroud)

功能:

$('#addListObjectSubmit').click(function (e) {

            var listObjectName = $('#m_newListObject').val();

            if((listObjectName == null) || (listObjectName == '')) {
                return false;
            }
            else {
                listObjects['listObjectName'] = listObjectName;

                var listObjectDesc = $('#m_newListObjectDesc').val();

                if ((listObjectDesc == null) || (listObjectDesc == '')) {
                    listObjects['listObjectDesc'] = null;
                }
                else {
                    listObjects['listObjectDesc'] = …
Run Code Online (Sandbox Code Playgroud)

javascript arrays jquery associative-array object

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

更改关联数组中的特定元素

我有两个关联数组,如下所示:

$prod1 = (
    [name] = 'John',
    [address] = 'Milky way',
    [city] = 'Miami',
);

$prod2 = (
    [address] = 'Not so milky way'
);
Run Code Online (Sandbox Code Playgroud)

$ prod1总是有相同类型的元素(名称,地址,城市),但$ prod2可以包含所有元素或其中一些元素

我要的是替换的元素值$ PROD1,随着要素匹配$ Prod2的.在上面的例子$ Prod2的包含的地址,因此,在地址$ PROD1应与地址替换$ Prod2的(其中的元件的其余部分当然应该留原样).

如何实现这一目标?

php arrays associative-array element

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

manage.py - 不在项目文件夹中?

我是第一次尝试Django,我正在尝试遵循django团队提供的教程.

在我创建了一个新项目后,我获得了以下文件夹/文件结构,就像教程说我应该:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
Run Code Online (Sandbox Code Playgroud)

当我创建一个应用程序时,我运行:

python manage.py startapp polls
Run Code Online (Sandbox Code Playgroud)

...在manage.py文件所在的文件夹中创建应用程序'polls' - 这给了我:

mysite/
    manage.py
    polls/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
Run Code Online (Sandbox Code Playgroud)

这意味着我创建的应用程序是在项目文件夹之外创建的,当然不应该是这种情况.我试图将manage.py移到项目文件夹中.但当我这样做并运行:

python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

...我收到以下错误:

raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" %     (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'testproject.settings' (Is it on sys.path?): No     module named testproject.settings
Run Code Online (Sandbox Code Playgroud)

我想我可以手动将应用程序移动到项目文件夹,但这是我不应该做的事情.

所以,教程中的某些内容是错误的(我很难相信),或者我在这里遗漏了一些东西(更有可能).

提前致谢.

django django-admin django-manage.py manage.py

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

不应该进行单元测试失败

我正在为一个应用程序进行单元测试,下面是一个单元测试,我只是想知道它失败的原因.

测试结果应该是"等腰"是真的,"等边"和"斜角"是假的,Console.WriteLine显示它们实际上是,但由于一些奇怪的原因,测试无论如何都会失败.我在这做错了什么?提前致谢.

我正在使用MSTest框架.

    public void isIsosceles()
    {
        Triangle triangle = new Triangle(2, 2, 5);

        var isosceles = triangle.isIsosceles();
        var equalateral = triangle.isEquilateral();
        var scalene = triangle.isScalene();

        Console.WriteLine(isosceles);       // True
        Console.WriteLine(equalateral);     // False
        Console.WriteLine(scalene);         // False

        Assert.IsTrue(true, "Test Isosceles", isosceles);
        Assert.IsTrue(false, "Test Equalateral", equalateral);    // Fails, why?
        Assert.IsTrue(false, "Test Scalene", scalene);            // Fails, why?
    }
Run Code Online (Sandbox Code Playgroud)

c# unit-testing

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

nil的未定义方法`each':NilClass?

我想动态创建数据库中用户的复选框,可以选择(一个或多个).但是,我显然做错了,因为下面的代码给出了以下错误:

undefined method `each' for nil:NilClass
...
<% @users.each do |user| %> <--- the line with the error
Run Code Online (Sandbox Code Playgroud)

控制器:

class ProjectsController < ApplicationController
    ...

    def new
      @project = Project.new
      @users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id]))
    end

    ...
end
Run Code Online (Sandbox Code Playgroud)

视图(new.html.erb):

<%= form_for @project do |f| %>
    <div class="alert alert-block">  
        <%= f.error_messages %>
    </div>
    <div class="text_field">
        <%= f.label :title%>
        <%= f.text_field :title%>
    </div>
    <div class="text_field">
        <%= f.label :description%>
        <%= f.text_field :description%>
    </div>
    <div class="dropdown">
        <%= …
Run Code Online (Sandbox Code Playgroud)

variables ruby-on-rails view instance-variables ruby-on-rails-3

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