App Engine에서 실행되는 응용 프로그램을 테스트하려고합니다. 나는 the Testbed framework를 사용하고, 지금까지 다음과 같은 예기치 않은 동작을 제외하고 매력처럼 작동합니다테스트 베드의 데이터 저장소 키가 잘못되었습니다.
이 같은 테스트 것 잘 (프레임 워크없이 단순화 된 버전) 일 :
from google.appengine.ext import db, testbed
testbed = testbed.Testbed()
testbed.activate()
testbed.init_datastore_v3_stub()
class Foo(db.Model):
pass
# now for the tests:
key = Foo().put()
assert key == db.Key.from_path('Foo', key.id())
assert Foo.all(keys_only=True).get() == db.Key.from_path('Foo', key.id())
assert db.get(db.Key.from_path('Foo', key.id())) # fails!
testbed.deactivate()
그러나, 다음 는는 (다시, 단순화 된 버전) 실패 :
from google.appengine.ext import db, testbed
testbed = testbed.Testbed()
testbed.activate()
testbed.init_datastore_v3_stub()
from myapp.models import Foo
# now for the tests:
key = Foo().put()
assert key == db.Key.from_path('Foo', key.id()) # fails!
assert Foo.all(keys_only=True).get() == db.Key.from_path('Foo', key.id()) # fails!
assert db.get(db.Key.from_path('Foo', key.id())) # fails!
# however, the following will succeed:
assert key == db.Key.from_path('Model', key.id())
assert Foo.all(keys_only=True).get() == db.Key.from_path('Model', key.id())
assert db.get(key)
testbed.deactivate()
어디 모델 이름이 시험 중에 사라는 무엇입니까? 그리고 가져온 모듈에서만 어떻게됩니까?
편집 :
감사 proppy, 고정 오타.
, 더 잘 설명하겠습니다.
testbed
데이터 저장소 스텁의 결과를 쿼리 할 때 예상대로 엔터티를 가져옵니다. 그러나 해당 엔터티에서 .key()
메서드를 호출하면 datastore_types.Key.from_path(u'Model', 1L, _app=u'testbed-test')
과 같은 것을 얻을 수 있지만 Model
은 분명히 내 엔터티의 올바른 종류가 아닙니다.
해당 키 (datastore_types.Key.from_path(u'Model', 1L, _app=u'testbed-test')
)에 대한 엔티티를 가져 오려고하면 정상적으로 작동합니다.
데이터 저장소 엔터티가 id
인 경우에만 db.Key.from_path(...)
을 사용하여 수동으로 키를 구성하려고하면 문제가 발생합니다.
예를 들어 종류는 User
이어야하며 db.Key.from_path('User', 1)
을 사용하여 키를 구성 할 수 있습니다. 하지만 해당 키를 사용하여 데이터 저장소에서 엔티티를 가져올 수 없습니다. 그러나 db.Key.from_path('Model', 1)
을 사용할 수는 있지만, 앞서 말했듯이 Model
은 올바른 데이터 저장소 종류가 아닙니다. 즉
:
from myapp.models import User
User(email='[email protected]').kind() # returns 'Model', not 'User'!
db.Model
서브 클래스가 내 응용 프로그램 코드에서 정의 될 때이 예기치 않은 동작은 testbed
을 사용하는 경우에만 생산 또는 dev에 서버에서 발생하지 않습니다 (즉, 테스트 케이스 자체는 아닙니다).
장고를 사용하지 않고 피라미드를 탐색하고 있지만 여기에서 실행중인 단위 테스트에서는 프레임 워크 관련 코드를 호출하지 않습니다.
는
나는 ..
같은 일뿐만 아니라 ndb
아직
ndb
으로 발생하여이 시도하지 않은
편집 2 주 있음 : 분명히
나는 그 모두를 발견하지 않았습니다 내 클래스는 서브 클래스가 google.appengine.ext.db.polymodel.PolyModel
이므로 서브 클래스가 PolyModel
인 경우 Model
이기 때문에 실제로 키는 Model
으로 올바르게 설정되었습니다.
나는 당신의 코드에 오타가 있다고 생각한다. Triu/True/g – proppy
그래서이 경우'key'는 무엇일까요? 추가 정보 없이는 진단하기가 어렵습니다. 그리고 장고를 사용하고 있습니까? –
@NickJohnson, 업데이트를 참조하십시오. –