首先,这不是我想要做的一些正常动作,但是这个边缘情况涉及我无法触及的很多遗留代码,以及需要为更新的东西编写的单元测试.
无论如何,我有一个类,我可以通过反射访问所有字段和方法,除了私有/受保护的静态.那么有没有办法通过反射访问这些私有静态方法?
我刚刚开始研究一个Java项目(因为我通常使用.net),并且首先让我觉得奇怪的是,在Maven项目中有一个/ src和一个/ test目录显然是源代码代码和测试应该去.
在.net中我更喜欢在单独的程序集/项目中进行测试,例如我会:
这样我就不必用任何测试来扩展我部署的代码,这样可以更容易地在真正的隔离中测试我的代码,并且在很多情况下我没有为每个项目编写测试,我只需要解决方案宽单元/集成/验收测试,即MySolution.UnitTests,MySolution.IntegrationTests.
然而在Java中它似乎只是捆绑在一起,我宁愿把它分开,但是当我想对默认结构采取不同的做法时,我听说Maven是一个残酷的情妇.
所以为了重新回到这篇文章,我的主要问题是:
希望应该是一个简单的问题......
我有一个集成测试模块,其中包含默认的目录结构:
src
|-main
|-test
|-java
|-resources
Run Code Online (Sandbox Code Playgroud)
然后在我的资源目录中,我有一个xxxx.xml和xxxx.xsd文件,我需要在测试中加载这些文件:
@Test
public void should_do_some_stuff_with_xml_and_xsd() // not actual test name
{
File xmlFile = new File("xxxx.xml");
File xsdFile = new File("xxxx.xsd");
...
}
Run Code Online (Sandbox Code Playgroud)
它一直在尝试加载文件失败,现在我认为这是由我需要从项目根目录或其他东西给它一个相对路径.我需要这个测试在我的IDE外部运行,所以我可以在构建服务器上运行测试...
所以我的问题是,我如何定位这些文件?
我有一个简单的Sinatra应用程序,我正在玩,由于某种原因,cookie似乎不适用于某些路线,我觉得很奇怪.
require "sinatra"
set(:authenticate) do |*vars|
condition do
unless request.cookies.has_key?("TestCookie")
redirect to("/login"), 303
end
end
end
get "/login" do
return "No valid cookie"
end
get "/secret", :authenticate => [:auth_cookie] do
cookie = request.cookies["TestCookie"]
return "Secrets ahoy - #{cookie}"
end
get '/cookie/set' do
response.set_cookie("TestCookie", {
:expires => Time.now + 2400,
:value => "TestValue"
})
return "Cookie is set"
end
get '/cookie/get' do
cookie = request.cookies["TestCookie"]
return "Cookie with value #{cookie}"
end
Run Code Online (Sandbox Code Playgroud)
如果我去cookie /设置它正确设置cookie(可以在firecookie中看到它),那么如果我去cookies /得到我得到正确的cookie输出.但是,如果我去/ secret它总是重定向到/ login.由于我仍然是Ruby语法的新手,我认为这可能是我的条件在authenticate扩展中的问题,所以我尝试删除它并像其他人一样吐出cookie.但仍然没有,所以我不知道为什么cookie在那里,我可以在浏览器中看到...和/ cookies/get工作,但/秘密不...
我在这里错过了什么吗?
有什么方法可以将元数据添加到快速路由中?例如:
app.get("/some/route", function(req,res) {
// ...
}, {some: 'meta-data});
Run Code Online (Sandbox Code Playgroud)
我正在为我的节点应用程序寻找一种AOP方法,因此我想用身份验证和/或日志记录代理某些路由。为此,我需要能够为每条路由分配某种挂钩标识符以指示应该对其进行代理,因此AOP对各个方法一无所知,而这些方法对AOP框架一无所知。
然后,我不会使用过多的话题,而是使用钩子或其他代理库之类的东西来检查它所处的所有路由some并添加一个thing拦截器。
因此,无论如何,任何最佳实践方法都可以完成上述工作?
现在我确定问题是因为包含一个名为"Shared"的模块的d.ts文件,以及一个require语句,如果在NodeJS环境中使用它,则该语句包含一个同名变量.
// shared.d.ts
declare module Shared { ... }
// other_module.ts
/// <reference path="shared.d.ts"/>
if(require) { var Shared = require("shared"); }
export class Something {
public someVar = new Shared.SomethingElse("blah");
}
Run Code Online (Sandbox Code Playgroud)
因此,当我编译other_module.ts(实际上是很多单独的文件)时,它告诉我Shared是一个重复的标识符,我可以理解,因为TS认为Shared是一个模块,但后来被告知它是require的返回.
这里的问题是模块的输出需要与nodeJS的require系统兼容,所以在这种情况下,当需要other_module时,它将在它自己的范围内并且不知道Shared.SomethingElse所以需要需要因此内部模块other_module将是能够访问共享库,但在浏览器环境中,它将Shared.SomethingElse通过全局范围获取.
如果我删除引用然后文件不会编译,因为它不知道Shared,如果我删除模块加载到nodejs(var otherModule = require("other_module"))时,它会抱怨它不知道Shared.有没有办法解决这个问题?
我似乎有一个奇怪的错误,我不确定这是否是我的假设在这里是否不正确,但没有关于这个主题的文档.
因此,当您创建自定义元素/属性并在该类上设置成员时,它们是按使用的,因此这些自定义attr/elements的每次使用都将拥有自己的类实例.
但是,目前似乎在使用绑定行为时,该类在该绑定行为的所有使用之间共享,该bind方法是隔离点.
我这样说是因为我假设他们都被设置为每次使用的实例,在这种情况下,一些异步逻辑从类上的最后一次使用的绑定行为中得到一个值,即this.someClassStateVar.
那么任何人都可以确认Aurelia是否在单例范围内使用绑定行为?
===编辑===
基于第一个答案,我想确认一下情景:
<section with-binding.bind="something">
<input value.bind="somethingElse & someBindingBehaviour">
<input value.bind="somethingElse2 & someBindingBehaviour">
</section>
Run Code Online (Sandbox Code Playgroud)
所以我期待有2个someBindingBehaviour类的实例,每个都适用于相关的输入,但我看到的行为是它们都使用相同的someBindingBehaviour类实例.
Blazor 现在似乎支持某种形式的继承,但没有明确的文档围绕它抽象样式组件是可能的。
例如,假设我希望能够<DynamicComponent>在页面上插入 N 个元素,我需要能够预先知道它们公开了哪些道具以及如何填充它们。
因此,理想情况下,我希望强制任何制作此类组件的人始终具有以下字段:
@code {
[Parameter] public abstract EventCallback OnSomeMandatoryEvent {get;}
[Parameter] public abstract ISomeInterface Data {get;}
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以确定我想要引入的组件将始终公开约定所需的属性。
那么这个用例是否受支持?
我有一个问题,想知道是否有办法吃蛋糕并吃掉它.
目前我有一个存储库和查询样式模式,我如何使用Linq2Sql,但我有一个问题,我看不到一个很好的方法来解决它.以下是问题的示例:
var someDataMapper = new SomeDataMapper();
var someDataQuery = new GetSomeDataQuery();
var results = SomeRepository.HybridQuery(someDataQuery)
.Where(x => x.SomeColumn == 1 || x.SomeColumn == 2)
.OrderByDescending(x => x.SomeOtherColumn)
.Select(x => someDataMapper.Map(x));
return results.Where(x => x.SomeMappedColumn == "SomeType");
Run Code Online (Sandbox Code Playgroud)
这里要注意的主要部分是Mapper,Query,Repository,然后是最后的where子句.我这样做是作为一个更大的重构的一部分,我们发现有很多类似的查询得到稍微不同的结果集,但然后将它们以相同的方式映射到特定于域的模型.因此,例如,取回a tbl_car然后将其映射到Car对象.因此,映射器基本上采用一种类型并吐出另一种类型,因此与选择中通常发生的情况完全相同:
// Non mapped version
select(x => new Car
{
Id = x.Id,
Name = x.Name,
Owner = x.FirstName + x.Surname
});
// Mapped version
select(x => carMapper.Map(x));
Run Code Online (Sandbox Code Playgroud)
因此,汽车映射器在所有区域上都可以重复使用,这些区域执行类似的查询,返回相同的最终结果,但在此过程中执行不同的位.但是我一直得到错误,说Map无法转换为SQL,这很好,因为我不希望它,但是我理解,因为它在表达式树中它会尝试转换它.
{"Method 'SomeData Map(SomeTable)' has no supported translation to SQL."}
Run Code Online (Sandbox Code Playgroud)
最后,返回并映射的对象在堆栈中进一步传递给其他对象使用,这使用Linq …
因此,当他们创建 es6 类时,他们只是默认将所有内容设为公开,这对我来说有点奇怪,但我还是照做了,因为我仍然使用旧的 es5 样式基于作用域的类。
无论如何,几年过去了,我们在班级中加入了私人成员,这看起来很棒,但是你看一下 Synax:
somePublicVar = 10;
#somePrivateVar = 20;
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我们现在必须用哈希/磅符号作为私有内容的前缀,考虑到 JS 有public和private保留供将来使用的关键字,这似乎是一个非常奇怪的选择,所以现在我们想区分 public 和 private 为什么不是现在做。
public somePublicVar = 10;
private somePrivateVar = 20;
Run Code Online (Sandbox Code Playgroud)
所以,我相信有为什么,但我在努力找到一个技术原因,因为它现在似乎是把那些最完美的时间public,并private从保留“使用”,使得它多一点明确,明显为给定成员的访问修饰符。
javascript ×4
maven ×2
maven-2 ×2
node.js ×2
aop ×1
asp.net ×1
asp.net-core ×1
aurelia ×1
blazor ×1
c# ×1
cookies ×1
es6-class ×1
express ×1
java ×1
linq ×1
linq-to-sql ×1
metadata ×1
oop ×1
reflection ×1
ruby ×1
sinatra ×1
sql ×1
static ×1
tsc ×1
typescript ×1
unit-testing ×1