小编Eri*_*ich的帖子

HttpResponseMessage包含所需响应的单元测试

我正在编写Web API控制器,现在我有以下代码:

public class PicklistsController : ApiController
{
    private readonly IPicklistRepository _repository;

    public PicklistsController(IPicklistRepository repository)
    {
        _repository = repository;
    }

    public HttpResponseMessage GetPicklistValues(string entityName, string fieldName)
    {
        if(_repository.Exists(entityName, fieldName))
            return Request.CreateResponse(HttpStatusCode.Accepted, _repository.Get(entityName, fieldName));

        return new HttpResponseMessage(HttpStatusCode.NotFound);
    }

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试测试此方法,我真正想要做的就是验证当存储库找到这些值组合时,HttpResponseMessage包含POCO PicklistItem中的值.作为这个框架的新手,我不太了解HttpResponseMessage的内部工作原理,我在这个网站上发现并通过一般的谷歌搜索告诉我在其内容上使用各种ReadAsync方法,但我真的不想要如果我可以避免它,请使用async.我真的只想验证当我返回时,我填充到我正在返回的对象中的东西是在对象中.这是我到目前为止的单元测试(使用JustMock设置存储库,Target是CUT):

public void Returns_Picklist_Item_JSON_When_Results_Exist()
{
    Repository.Arrange(repo => repo.Exists(EntityName, FieldName)).Returns(true);

    const int value = 2;
    const string label = "asdf";
    var mynewPicklistItem = new PicklistItem() { Label = label, Value = value };
    Repository.Arrange(repo => repo.Get(EntityName, FieldName)).Returns(Enumerable.Repeat<PicklistItem>(mynewPicklistItem, 1));

    var response = Target.GetPicklistValues(EntityName, …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing asp.net-web-api

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

Application.GetWindow()*非常*慢

我按顺序调用了以下两种方法(顺序使用适当的类级别字段)

public const string ProcessName = "This is"
public const string WindowTitle = "somewhat proprietary."

public Application App { get; set; }

public void Launch()
{
    var theProcess = Process.GetProcesses().First(p => p.ProcessName.Contains(ProcessName))
     App = Application.Attach(theProcess);
}

public void Select()
{ 
    var window = App.GetWindow(WindowTitle);

    var textBox = window.Get<TextBox>();
    //etc, do more stuff in the window
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,调用App.GetWindow()需要很长时间.喜欢超过一分钟.应用程序和窗口都是打开和运行的.

我已经尝试过重载,GetWindow()并尝试调用Application.GetWindows()Application.Find(),但结果相同.

有没有人想过如何减少这个时间,或者至少确定需要这么长时间?我没有嫁给我的实施任何延伸 - 无论是什么让我的窗口对象对我来说都没问题.

更新:

为了解决迄今为止的评论,我修改了代码以尽量消除其他许多问题.

public void Select()
{
    var processes = Process.GetProcesses().ToList();
    var …
Run Code Online (Sandbox Code Playgroud)

c# white-framework

18
推荐指数
1
解决办法
1116
查看次数

以DBObject(s)的形式检索数组中的子文档

我是MongoDB的新手,我正在使用它和Java驱动程序.我有这个文件结构:

{ "_id" : ObjectId("4f7d2ba6fd5a306d82687d48"), "room" : "Den" }
{ "_id" : ObjectId("4f7d2baafd5a306d82687d49"), "room" : "Foyer" }
{ "_id" : ObjectId("4f7d2fdcfd5a306d82687d4a"), "room" : "Master Bedroom" }
{ "_id" : ObjectId("4f7d301afd5a306d82687d4b"), "room" : "Guest Bedroom" }
{ "_id" : ObjectId("4f7d2b98fd5a306d82687d47"), "code" : "A", "lights" : [ { "name" : "Overhead", "code" : "1" } ], "room" : "Kitchen" }
Run Code Online (Sandbox Code Playgroud)

最后一行特别有兴趣说明我想做什么.每个文档都是一个房间,并且可以具有对应于作为子文档阵列的值的"灯"键.从建模的角度来看,我有一个房子,它有0-n个房间,每个房间都有0-n个灯.我想在Java中做的是将房间的名称作为参数,并返回与灯光阵列中的子文档相对应的DBObject集合 - "让我所有灯光为房间'厨房'",例如.

到目前为止,在TDD风格中逐步进行,我构建了这个查询:

public static final String ROOM_KEY = "room";

public static final String EQUALS_KEY = "$eq";

private BasicDBObject buildRoomNameQuery(String roomName) …
Run Code Online (Sandbox Code Playgroud)

java mongodb mongo-java

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

我可以在门控TFS 2010 Checkin中"自动协调"吗?

我正在设置一个项目,在我配置的服务器上使用TFS,并且我选择使用门控签入策略.有了这个,当我签入代码时,我有以下一系列步骤:

  1. 签入.
  2. 选择"在本地保留我的待处理更改".
  3. 单击"构建更改".
  4. 等待构建继续并最终成功.
  5. 单击另一个选项卡或在Visual Studio中执行某些操作.
  6. 在任务栏中看到一条要求我"调和"或"忽略"的消息已经弹出,但是在Visual Studio背后(大多数时候,这条消息永远不会出现,直到我开始离开Build Explorer,无论多长时间我等着)

首先,事实上,直到我与Visual Studio交互,然后它隐藏了来自我的消息才发生这一事实是奇怪的,有点烦人,但一次只有一个问题.更重要的是,我想知道的是我是否能以某种方式告诉TFS/Visual Studio我总是想要和解.我正在寻找的将是相当于这个消息框有一个复选框,上面写着"记住我的选择",然后我检查它.正如我所看到的,我总是希望将搁置的和现在检查的更改与我的本地存储库进行协调,因此我不想麻烦地提出此消息并回答它.

这可能吗?如果它在某种程度上可能,出于某种原因这是一个坏主意吗?(我是新来的,所以请告诉我是否有充分的理由让我每次都要挑选)

continuous-integration visual-studio-2010 checkin tfs2010 visual-studio-2012

9
推荐指数
1
解决办法
2285
查看次数

我可以使用moq的InSequence()和MockBehavior.Loose吗?

我试图执行后续调用验证,我发现moq支持InSequence()方法,如:

MockSequence s = new MockSequence();
validator.InSequence(s).Setup(m => m.IsValid(It.IsAny<Frame>())).Returns(true);
encryptor.InSequence(s).Setup(m=>m.Encrypt(It.IsAny<Frame>()));
socket.InSequence(s).Setup(m => m.Send(It.IsAny<Frame>()));
compressor.InSequence(s).Setup(m => m.Compress(It.IsAny<Frame>()));
Run Code Online (Sandbox Code Playgroud)

但是,这似乎仅在我将模拟行为指定为"严格"时才起作用,这禁止我在模拟对象上调用其他方法.但是,我希望能够在这些对象上调用其他方法,我只是希望这些调用按顺序执行.

是否有任何"支持"的方式(而不是诉诸.Callback()和手工实现)?我找到了一个名为moq.sequence的附加库,但是,预编译版本不适用于最新的Moq.

c# moq mocking

9
推荐指数
1
解决办法
2775
查看次数

找不到合适的方法来覆盖c#

我已经尝试了一些方法来修复错误,我似乎无法想出这个,我会非常感谢任何帮助.错误在Triangle和Square类中,Triangle中的错误是"不实现GeometricFigure的继承抽象成员"和"没有找到合适的方法来覆盖"而Square只是"找不到合适的方法来覆盖"错误.

namespace ShapesDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Rectangle rec = new Rectangle(8,10);
            Square squ = new Square(11, 12);
            Triangle tri = new Triangle(10, 20);
            Console.WriteLine("Computed area is {0}" + "\n\n" + "Computed Triangle is: {1}"         + "\n", squ.ComputeArea(rec.Area), tri.ComputeArea(rec.Area));

        }
    }

    abstract class GeometricFigure
    {
        public decimal _height, _width, _area;


        public decimal Height
        {
            get { return _height; }
            set { _height = value; }
        }

        public decimal Width
        {
            get { return _width; } …
Run Code Online (Sandbox Code Playgroud)

c#

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

在脚本标记下编写内容

我正在尝试使用javascript在我的页面下动态创建脚本标记.到目前为止,我能够创建它,能够设置其类型和src.现在我的问题是,有没有办法,而不是将src定义到不同的页面,我可以在同一页面上分配它的内容吗?让我编写代码以使其更有意义:

var script = document.createElement("script");
script.type = "text/javascript";
script.src = 'custom.js';
Run Code Online (Sandbox Code Playgroud)

现在有什么方法我可以通过这样做来分配内容:

script.content = 'document.write("stackoverflow")';
script.html = 'document.write("stackoverflow")';
Run Code Online (Sandbox Code Playgroud)

我不确定它们是否存在,但只是猜测我是否可以做这样的事情.

javascript

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

如何选择数据到List <T>而不是DataTable?

这就是我目前从数据库中选择数据的方式:

public DataTable GetData()
{
    DataTable table = new DataTable("Table");
    using (SqlConnection connection = new SqlConnection("Connection string"))
    {
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandType = System.Data.CommandType.Text;
        command.CommandText = "query string";

        connection.Open();
        SqlDataAdapter adapter = new SqlDataAdapter(command);
        adapter.Fill(table);
    }
    return table;
}
Run Code Online (Sandbox Code Playgroud)

但它返回DataTable,我想选择List而不是DataTable.像这样:

public List<MyClass> GetData()
{
    DataTable table = new DataTable("Table");
    using (SqlConnection connection = new SqlConnection("Connection string"))
    {
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandType = System.Data.CommandType.Text;
        command.CommandText = "query string";

        connection.Open();
        SqlDataAdapter adapter …
Run Code Online (Sandbox Code Playgroud)

c# c#-4.0

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

无法在Eclipse项目属性中保存"是Tomcat项目"设置

我有一个Spring MVC项目,我一直在部署到Tomcat(在本地和服务器上安装).我正在使用Eclipse Indigo作为我的IDE.为了部署,我一直在右键单击并选择"在服务器上运行",这将在localhost上正常运行.为了将WAR部署到实际服务器,我一直在右键单击Project,选择Export,然后通过向导来部署WAR文件.

我的Eclipse/Java很生疏,但我确实记得几年前我使用它时,我使用的是Tomcat的Sysdeo插件,它可以让我从右键单击上下文中选择Deploy to War.所以,我戳了一下,发现了我安装的"Mongrel".有了这个,我根据偏好去了Mongrel,并设置我的Tomcat版本,这样我就可以点击小启动/停止Tomcat图标并启动/停止服务器.这很成功.

我现在无法为我的生活做的是,在Project Properties-> Tomcat中,选择"是一个Tomcat项目".我选中复选框,然后单击应用和/或确定关闭窗口,当我再次打开它时,我的设置不会被记录.我已经尝试检查框并添加其他选项(如上下文名称,WAR文件导出路径,根子目录和激活开发者加载器),但我没做什么"坚持".

有人能告诉我我错过了什么,或者至少指出了我正确的方向?我很难过.

提前致谢.

java eclipse tomcat mongrel eclipse-plugin

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

从OleDbCommand返回值

sqlQuery = "SELECT [ID] from [users] WHERE CallerName=@CallerName";

OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
cmd = new OleDbCommand(sqlQuery, conn);
cmd.CommandText = sqlQuery;
cmd.Parameters.Add("@CallerName", OleDbType.VarChar).Value = labelProblemDate.Text.Trim();
cmd.Parameters["@CallerName"].Value = name;
cmd.ExecuteNonQuery();          
conn.Close();
Run Code Online (Sandbox Code Playgroud)

我被告知这是如何使用参数从SELECT查询中读取数据,但它不起作用.我想我做错了什么.

我正在使用WinForms和Microsoft Access 2007

c# sql oledb parameters sqlparameter

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