我在单元测试上已经遇到了一些困难,我正在尝试使用我目前正在开发的一个小项目来学习它,我遇到了这个问题,这两个问题我希望你能帮助我
1-我的项目是一个MVC项目。我的单元测试应该从哪个级别开始?他们应该只关注业务层吗?他们还应该测试我的控制器上的操作吗?
2-我有一种方法可以验证用户名格式,然后访问数据库以检查它是否可供使用。返回一个布尔值,无论该用户名是否可用。人们会为这种方法创建一个单元测试吗?我对测试格式验证感兴趣,但是如何在不查询数据库的情况下检查它们?另外,如果格式正确,但用户名已在使用中,我将得到一个错误值,但验证有效。我可以解耦这个方法,但是只有在格式正确的情况下才应该进行数据库验证,因此它们应该以某种方式绑定在一起。具有单元测试知识的人将如何解决这个问题。或者有人会如何重构这个方法来测试它?我可以为数据库访问创建一个存根,但是如何在用户测试时将其附加到我的项目,但在本地运行时将其分离?
谢谢!
我有一个Maven Java项目,我在其中添加了pom:
<build>
....
<plugin>
<!-- adding second test source directory (just for integration tests) -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${plugin.build-helper-maven-plugin.version}</version>
<executions>
<execution>
<id>add-integration-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/integration-test/java</source>
</sources>
</configuration>
</execution>
<execution>
<id>add-integration-test-resource</id>
<phase>generate-test-resources</phase>
<goals>
<goal>add-test-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/integration-test/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</build>
Run Code Online (Sandbox Code Playgroud)
InteliJ将我在兼容测试下的java和资源文件夹识别为代码文件夹,但Eclipse没有.有没有办法在导入项目时将这些文件夹添加为代码文件夹?
我的应用程序WP7未被接受,因为如果互联网不可用,则无法加载.我找了一种检查它的方法并找到了这个命令
NetworkInterface.GetIsNetworkAvailable()
但它不适用于模拟器,我没有任何设备来测试它.如果设备处于飞行模式,有人可以告诉我它是否返回false?如果没有,我该如何检查?
谢谢,奥斯卡
编辑:我也尝试过这段代码:
try
{
wsClient.CurrenciesCompleted += new EventHandler<CurrencyConversion.CurrenciesCompletedEventArgs>(wsClient_CurrenciesCompleted);
wsClient.CurrenciesAsync(null);
}
catch
{
NetworkNotAvailable();
}
Run Code Online (Sandbox Code Playgroud)
但是我无法捕捉异常,我也尝试过wsClient_CurrenciesCompleted方法,但也没有好处.
我在哪里可以测试它?
我正在调整一个开源项目(NopCommerce).它是一款出色的软件,支持使用插件进行扩展.对于一个插件,我想向视图添加信息,为此,我想从Controller继承并覆盖我需要更改的操作.所以这是我的控制器:
public class MyController : OldController{
//stuff
public new ActionResult Product(int productId)
{
//Somestuff
}
}
Run Code Online (Sandbox Code Playgroud)
我从我的插件更改了路由,但是当调用此操作时,我收到以下错误:
控制器类型'MyController'上的当前操作'Product'请求在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult类型MyPlugin上的产品(Int32)System.Web.Mvc.ActionResult类型OldController上的产品(Int32)
有什么办法可以覆盖这个方法吗?(ps:我不能使用override关键字,因为它在OldController中没有标记为虚拟,抽象或覆盖)
谢谢,奥斯卡
我正在尝试创建一个新的巡航控制项目.为此,我将其添加到我的ccnet.config文件中
<project name="MyProj"
description="MyProjproject">
<triggers/>
<sourcecontrol type="git">
<repository>GitAddr</repository>
<branch>releaseName</branch>
<autoGetSource>true</autoGetSource>
<fetchSubmodules>true</fetchSubmodules>
<executable>C:\Program Files (x86)\Git\cmd\git.exe</executable>
<tagOnSuccess>false</tagOnSuccess>
<commitBuildModifications>false</commitBuildModifications>
<commitUntrackedFiles>false</commitUntrackedFiles>
<tagCommitMessage>Unation Web Build {0}</tagCommitMessage>
<tagNameFormat>Unation-Web-Build-{0}</tagNameFormat>
<committerName>Oscar Albrecht</committerName>
<committerEMail>oalbrecht@unation.com</committerEMail>
<workingDirectory>d:\GIT\Sources\WEB</workingDirectory>
<timeout>60000</timeout>
</sourcecontrol>
<tasks>
<exec>
<!-- if you want the task to fail, ping an unknown server -->
<executable>ping.exe</executable>
<buildArgs>localhost</buildArgs>
<buildTimeoutSeconds>15</buildTimeoutSeconds>
<description>Pinging a server</description>
</exec>
</tasks>
<publishers>
<xmllogger />
<artifactcleanup cleanUpMethod="KeepLastXBuilds"
cleanUpValue="50" />
</publishers>
</project>
Run Code Online (Sandbox Code Playgroud)
但我得到了一个
ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation has timed out.
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.Execute(ProcessInfo processInfo)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GitFetch(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.CreateUpateLocalRepository(IIntegrationResult result)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Git.GetModifications(IIntegrationResult from, …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序存在一些数据库问题:当它尝试打开与数据库的连接(或执行查询,这不清楚)时,它突然冻结。没有错误信息。我怀疑有一些查询阻止了其他查询,我想弄清楚那是什么。我用了
SET profiling=1;
Run Code Online (Sandbox Code Playgroud)
但是当我执行时:
show profiles;
Run Code Online (Sandbox Code Playgroud)
我只得到我自己执行的查询,而不是应用程序查询(应用程序和我使用的是同一个用户)。
打电话
SHOW FULL PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)
返回包含所有进程的表。
+-----+----------+---------------------+--------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+----------+---------------------+--------+---------+------+-------+-----------------------+
| 8 | user | <HOST> | DBs | Sleep | 3 | | NULL |
| 722 | user | <HOST> | DBs | Sleep | 8205 | | NULL |
| 726 | user | <HOST> | DBs | Sleep | 8212 | | NULL |
| …Run Code Online (Sandbox Code Playgroud) 我正在将ETL过程从工具转换为Java批处理API应用程序.在这个ETL过程中.在当前版本(使用该工具)中,我们有许多连接不同表的SQL语句,以便生成所需的输出.现在可以转换为Java,JPA.
我想使用本机查询.这样会很好,因为它不需要为查询中使用的每个表创建实体,我可以使用POJO来查询结果(我也不需要重写查询).阅读这个答案,我知道我可以使用@SqlResultSetMapping.问题是我的项目中没有任何实体,所以我不知道在哪里放这个注释.我可以在任何地方放置这个注释,以便实体经理找到它吗?
PS:在我的概念证明中,我目前正手动从一组对象转换为POJO,但我真的不喜欢这种方法.
将@Entity注释添加到POJO将导致我的应用程序无法启动:
引起:org.hibernate.HibernateException:缺少表:MyTable
我不确定(现在正在搜索它),但我认为它可能是由我的persistence.xml中的这个属性引起的
<property name="hibernate.hbm2ddl.auto" value="validate"/>
Run Code Online (Sandbox Code Playgroud) 在将其提交给TFS之前,我想强制我的所有团队成员对他们的C#源代码执行代码分析.在此分析中,我希望具有代码质量(样式和可能的错误).
我找到了CodeRush,ReSharper,但它们非常昂贵.我也发现了FXCop,但它只适用于DLL和EXE文件.我喜欢StyleCop,但我找不到将它集成到TFS的方法,并且警告消息中没有"严重性".
你知道有这种功能的工具吗?
谢谢!
我有这个文件夹结构:
/ home/me/composetest/home/me/composetest/mywildflyimage
在复合内部我有这个docker-compose.yml:
web:
image: test/mywildfly
container_name: wildfly
ports:
- "8080:8080"
- "9990:9990"
Run Code Online (Sandbox Code Playgroud)
在mywildflyimage里面我有这个docker图像:
FROM jboss/wildfly
EXPOSE 8080 9990
ADD standalone.xml /opt/jboss/wildfly/standalone/configuration/
RUN /opt/jboss/wildfly/bin/add-user.sh admin admin --silent
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)
如果我跑
docker built -t test/mywildfly .
docker-compose up
Run Code Online (Sandbox Code Playgroud)
一切都很好,管理部分注意到0.0.0.0(CMD命令的管理0.0.0.0部分).
如果我更改了docker-compose.yml:
web:
build: mywildflyimage
container_name: wildfly
ports:
- "8080:8080"
- "9990:9990"
Run Code Online (Sandbox Code Playgroud)
并运行docker-compose up
它仍然会启动,但管理部分不再绑定到0.0.0.0(这是我继承的图像的默认行为).
当我build在docker-compose.ml中使用命令时,为什么它会停止工作?
编辑:它似乎忽略了我所有的docker文件命令.