我是Python的新手,所以如果这是一个重复或过于简单的问题我会道歉.我编写了一个协调器类,调用另外两个使用kafka-python库来发送/读取Kafka数据的类.我想为我的协调员课程编写一个单元测试,但是我很难弄清楚如何最好地解决这个问题.我希望我可以创建一个替代构造函数,我可以将我的模拟对象传递给,但这似乎不起作用,因为我得到一个错误,test_mycoordinator无法解决.我是否会以错误的方式测试这门课程?我应该测试一种pythonic方式吗?
这是我的测试类到目前为止的样子:
import unittest
from mock import Mock
from mypackage import mycoordinator
class MyTest(unittest.TestCase):
def setUpModule(self):
# Create a mock producer
producer_attributes = ['__init__', 'run', 'stop']
mock_producer = Mock(name='Producer', spec=producer_attributes)
# Create a mock consumer
consumer_attributes = ['__init__', 'run', 'stop']
data_out = [{u'dataObjectID': u'test1'},
{u'dataObjectID': u'test2'},
{u'dataObjectID': u'test3'}]
mock_consumer = Mock(
name='Consumer', spec=consumer_attributes, return_value=data_out)
self.coor = mycoordinator.test_mycoordinator(mock_producer, mock_consumer)
def test_send_data(self):
# Create some data and send it to the producer
count = 0
while count < 3:
count += 1 …Run Code Online (Sandbox Code Playgroud) 我创建了一个python项目,我想用conda构建但是当我cd到conda-recipe文件夹并运行conda build .找不到setup.py文件时我收到错误.我已经尝试将conda-recipe移动到与setup.py相同的级别并将source部分添加到我的meta.yaml但是我仍然收到错误.将conda-recipe相对于我的python包放在哪里的最佳位置?
这是我的项目结构:
- MyProject/
|- conda-recipe/
|- bld.bat
|- build.sh
|- meta.yaml
|- code/
|- subpackage/
|- __init__.py
|- foo.py
|- tests/
|- test_foo.py
|-setup.py
Run Code Online (Sandbox Code Playgroud)
这是我的bld.bat的内容:
"%PYTHON%" setup.py sdist install
if errorlevel 1 exit 1
Run Code Online (Sandbox Code Playgroud)
而build.sh:
#!/bin/bash
$PYTHON setup.py sdist install
Run Code Online (Sandbox Code Playgroud)
和meta.yaml:
package:
name: myproject
version: "1.0.0"
source:
path: ../code
requirements:
build:
- python
- setuptools
run:
- python
- argparse
Run Code Online (Sandbox Code Playgroud)
为了完整性,这里是错误:
(C:\Anaconda2\conda-bld\myproject_1492545717354\_b_env)
C:\Anaconda2\conda-bld\myproject_1492545717354\work>
"C:\Anaconda2\conda-bld\myproject_1492545717354\_b_env\python.exe" setup.py
sdist install C:\Anaconda2\conda-bld\myproject_1492545717354\_b_env\python.exe:
can't open file 'setup.py': [Errno 2] No …Run Code Online (Sandbox Code Playgroud) 我在线搜索了很多,我找不到使用自动装配构造函数进行单元测试的示例.我使用Spring自动将属性文件中的值自动装入我的应用程序.我想单元测试MyApp.java的start方法,但我有一个自动装配的构造函数,所以我不知道如何实例化MyApp.没有自动装配的属性,我在单元测试中这样做:
@Test
public void testStart() {
try{
MyApp myApp = new MyApp();
myApp.start();
}
catch (Exception e){
fail("Error thrown")
}
}
Run Code Online (Sandbox Code Playgroud)
我不想模拟自动装配,因为我需要从属性文件中获取值并使事情进一步复杂化,我通过注释配置所有内容.我没有spring.xml,application-context.xml或web.xml文件.那么我该如何实例化/测试MyApp的start方法呢?我尝试添加@RunWith(SpringJUnit4ClassRunner.class)并自动装载MyApp myApp,但是它会导致错误,无法通过在测试类上实现ApplicationContextAware来加载未修复的应用程序上下文.
这是MyApp.java
@Component
public class MyApp {
private static ApplicationContext applicationContext;
private static MyAppProperties myAppProperties;
//Obtain the values from the app.properties file
@Autowired
MyApp(MyAppProperties myAppProps){
myAppProperties = myAppProps;
}
public static void main(String[] args) throws Exception {
// Instantiate the application context for use by the other classes
applicationContext = new AnnotationConfigApplicationContext("com.my.company");
start();
}
/**
* Start the …Run Code Online (Sandbox Code Playgroud) 我试图根据现有的JAX-RS生成器制作一个自定义的swagger代码生成器.我按照Swagger-Codegen GitHub页面上的说明使用命令java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar meta -o output/myLibrary -n ABCCodegen -p com生成了一个模块.abc.codegen.我创建了我需要的模板并更新了AbcCodegenGenerator.java文件.
我尝试运行代码时遇到了问题.命令java -cp swagger-codegen-cli.jar:ABCCodegen-swagger-codegen-1.0.0.jar io.swagger.codegen.Codegen -l ABCCodegen -o ./test给出错误无法找到或加载主类io.swagger.codegen.Codegen.在查看Swagger Google Group上的帖子后,我尝试运行命令java -cp ABCCodegen-swagger-codegen-1.0.0.jar -jar swagger-codegen-cli.jar langs.但是,我的自定义模块abc未显示在列表中.在java类本身中是否需要以编程方式执行某些操作来告诉codegen关于我的生成器?
这是我的班级AbcCodegenGenerator.java:
package com.abc.codegen;
import io.swagger.codegen.*;
import io.swagger.models.Operation;
import io.swagger.codegen.languages.*;
import java.util.*;
import java.io.File;
public class AbcCodegenGenerator extends AbstractJavaJAXRSServerCodegen {
public AbcCodegenGenerator(){
super();
sourceFolder = "src/main/java";
invokerPackage = "io.swagger.api";
artifactId = "com.abc";
outputFolder = "generated-code/ABCCodegen";
modelTemplateFiles.put("model.mustache", ".java");
//Classes for the API
apiTemplateFiles.put("api.mustache", ".java");
apiTemplateFiles.put("apiService.mustache", ".java");
apiTemplateFiles.put("apiServiceImpl.mustache", ".java"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 Kafka 发送一个非常简单的 JSON 对象,并使用 Python 和 kafka-python 从另一端读出它。但是,我一直看到以下错误:
2017-04-07 10:28:52,030.30.9998989105:kafka.future:8228:ERROR:10620:Error processing callback
Traceback (most recent call last):
File "C:\Anaconda2\lib\site-packages\kafka\future.py", line 79, in _call_backs
f(value)
File "C:\Anaconda2\lib\site-packages\kafka\consumer\fetcher.py", line 760, in _handle_fetch_response
unpacked = list(self._unpack_message_set(tp, messages))
File "C:\Anaconda2\lib\site-packages\kafka\consumer\fetcher.py", line 539, in _unpack_message_set
tp.topic, msg.value)
File "C:\Anaconda2\lib\site-packages\kafka\consumer\fetcher.py", line 570, in _deserialize
return f(bytes_)
File "C:\Users\myUser\workspace\PythonKafkaTest\src\example.py", line 55, in <lambda>
value_deserializer=lambda m: json.loads(m).decode('utf-8'))
File "C:\Anaconda2\lib\json\__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "C:\Anaconda2\lib\json\decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end()) …Run Code Online (Sandbox Code Playgroud) python ×3
unit-testing ×2
anaconda ×1
conda ×1
java ×1
json ×1
junit ×1
kafka-python ×1
mocking ×1
python-mock ×1
spring ×1
swagger ×1
swagger-2.0 ×1